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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; g! C8 c$ g6 E! ]" o0 n
main文件:6 x7 b' X1 E# t$ h
interrupt void interrupt4(void)  ' f  L- k3 o' Q& @' B; X' [
{
2 o8 o& M2 m3 Q" P0 X  Uint32 sample;- e2 b) q1 c' {& D
, E% L% O* }: S# b
  sample = input_sample(); // read L + R samples from ADC
6 Q# Y6 |5 o  e, C3 U4 a  output_sample(sample);   // write L + R samples to DAC , a- f7 A) u% ]% s
  return;! v+ ]$ B5 Z' e  u* L2 t
}+ P3 I% B0 }" `

: Z% j; ]. f2 q2 lint main( void )
0 m/ R( t8 c8 t( {# b{  w6 \( }# t1 j2 U+ @4 o- D# W( o: L

- t2 W: E5 M6 Y1 j: R7 h    /* Initialize BSL */
5 {+ W4 x0 [8 t    EVMC6747_init( );
! o& q  P& Z: x2 E' U* c        /* Call evmc6747_intr function */3 g5 e2 s1 [) R
    aic3106_init( );* j# `) l8 _, j& K$ {
        while(1);
7 C5 e5 W  K( i; `8 _' X}
7 S" H! x- c; ~4 A+ ?8 ?- p( P; P, b- Y& M: e% s( v. ?

+ a  _" Z4 Q, J& W& L7 P: |3 aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) l5 `5 K% r9 B% j; q2 g. q( ]
/* Initialize MCASP1 */' x: Q0 H8 m  ]4 _1 g7 f9 z: o4 Q
    mcasp = &MCASP_MODULE_1;
/ l- U4 ~  K3 e% Y    mcasp->regs->GBLCTL  = 0;       // Reset5 X1 P! K1 }6 b- N
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- f! ~, v) n' T' ^6 J3 L6 J- g    mcasp->regs->XGBLCTL = 0;       // Reset TX4 x+ k) D& v. D/ u# }
    mcasp->regs->PWRDEMU = 1;       // Free-running8 W5 e  y5 J" O( w; x! U) K5 J
   // configure McASP0 receive registers
* ?) v( J7 j) d' M    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 `# x! k% Q& z5 d5 q. m. S    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 q1 j6 r: {6 Q0 C% v    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( Q; P% q' {% W1 U% ^, y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# y# I, F8 s$ q4 j8 @6 l4 T: O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 E- A- S# S/ r7 F/ [. Z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 W/ G3 _; L. O1 z" s( A4 i' `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 Y% H! z1 w8 P5 y* X& m2 L    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 K! _! z0 i% f0 ]
! v- s$ Y" ]9 L, \; s    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& S$ U: O" n+ z, O5 r& ^    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 E7 k/ W; ?, Z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ Z+ H' R9 ~4 p) Z9 _
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 ^! K/ i+ b+ b) n! ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- ~- I# u# x- r! j. R. o
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ b" O2 o' @! e! s) k- e- U5 o/ I    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. J3 t* h5 l0 j; L; t" W* H
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 |8 Y3 q; x3 V& w; S
( C+ r- C7 N9 d6 w; c; {/ {
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( H4 c% U1 w0 x8 w, c( Q1 U4 C( ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# P, R  t- \2 ]8 g; M9 N  _
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 {+ X2 j- K" T4 n
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ W/ Y8 Q: L3 e- P) D2 S/ j% L# T( ^  Q  t' F, g, \" B
    mcasp->regs->DITCTL     = 0x00000000; // Not used3 F( {1 @: K4 n: W8 L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" N, R: Q, r; [0 g/ k2 I    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 r# V2 l& M5 y; i- G$ {1 S! g
4 a2 b4 p/ W  Y- Q1 t/ T/* Starting sections of the McASP*/5 `, _9 e( M5 m2 h8 B8 S: Q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 i( {2 a2 T( I( j' q0 y- d* }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 C6 d$ }7 F7 f2 a3 `  T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + R- D0 U2 W% S, O7 \- n# x& O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 X+ k' q& m7 {, b, X6 W! g
/ v- F/ m8 A5 {- @& C: C6 v# }    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , G) ^$ \5 q8 c" C; _- s& C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 |, V2 F. n2 o& i1 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ @% B! j$ T( b  M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' h4 M- g' V7 _  G/ m  e
! [" F/ s# n) Z" N' V" Q    mcasp->regs->XSTAT = 0x0000ffff; ( ^" t/ v$ u0 o) ^) {% r
    mcasp->regs->RSTAT = 0x0000ffff; 4 }' L# \- F' n' T0 F% W4 {% b  F
  w' u8 B- h/ R* q  }% d( e
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) V3 T& t( q+ ~2 C, r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; |8 ?, T2 ~; x) A6 Z2 q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ D$ R6 w( _+ H& c9 C- i: U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% v3 K+ U7 b- Q1 h- l' ^3 \4 q8 b* u' v: M
    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 i$ p5 T% Y- o4 k7 \3 v    mcasp->regs->XBUF5 = 0;
: U4 J! ?3 K, K    mcasp->regs->RBUF0 = 0;# F! t- p5 D8 H# _# M* m' H

6 O) b; x- B9 d  s6 _& A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : U  e& \$ t2 q! ]9 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 D" t  |, p2 q- B9 Z1 q  q5 }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ Y, t* H1 T" q  e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* ?3 ~- V6 n( ~4 B
" A$ k0 e# J' v  e8 m, ?
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* M, v" J! w& Z! k, `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& r9 O9 j& T. ^  ]4 B# D" J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 \. h& K" }! K: q3 w! Y5 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! O' M) M) z: ?  `: b: ]# O
$ \/ z7 j9 s4 b
    CSR = 0x0000;9 k7 x$ W8 R# F; ^( ~
    INTC_INTMUX1 = 0x3d;
1 a* M% B1 `: c6 X+ c6 R# M; L    ISTP = (unsigned int)vectors;/ f! [, p  w( v  p/ k
    ICR = 0xFFF0;  2 \$ S1 u$ H+ T  `' Y1 V2 P
    IER |= 0x12;  
' Z8 I. L% F8 I% i! G5 B    CSR |= 0x01;  6 `8 C7 v5 N8 R' E% H6 ?& U. S
3 t8 T+ ^! c" v5 Q/ ^

3 h0 r  i' K7 n' V4 n9 C+ a; H  F! R4 s7 w8 x, J# p
还有就是两个输入输出函数:
& f7 F5 E0 k/ k; k2 L  k. Cvoid output_sample(Int32 out_data)" R" h' L# ?3 |, p% w4 N
{( D7 H9 Z0 R+ @' G
  AIC31_data.uint = out_data;  
. a3 C  c" L1 C+ G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ p3 j4 k# M% M0 g* o}- b0 I# e# j8 K

. A) v6 Z- K; O( b) tInt32 input_sample(void)6 D1 ^& S4 f6 j+ f% r
{  ' C; w- T$ h% l3 w) M& D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) q4 R6 V- v: Z' w; E  return (AIC31_data.uint);
9 k( M  u. o- o3 R9 ^- }}6 j8 c# i0 |+ i' p) T( z4 ^

  `. \8 `+ v& p: \+ z& |9 y8 Y
分享到:  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-8 09:17 , Processed in 0.039746 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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