C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 Y/ l( O/ _6 n, T1 S3 Q) G6 p/ ^+ Vmain文件:1 S" J' m6 v% r" i/ ]1 P
interrupt void interrupt4(void)  
- P4 j, V' r2 `( I! [" D{
) ]2 t: f/ a$ }1 W: m9 |  Uint32 sample;  g' Y$ D# s% {! S. C

; v+ i- w5 |  Y, L; R( R  sample = input_sample(); // read L + R samples from ADC
8 I. ^% [0 p" G  output_sample(sample);   // write L + R samples to DAC
5 K4 j- F# `0 D8 W& y! n  return;
7 H1 ]4 e2 I1 [$ A4 N* q! @9 r}
8 h6 @3 Q) Y9 y* ^
( I6 d" R4 K4 Z) I/ i1 t- Bint main( void )
3 ~2 H8 Y. k7 r; A& E' r{
& t) ?2 [' M! v* d: Y" }
$ H+ D0 G5 I1 {) ~  }2 H6 `    /* Initialize BSL */
$ M2 s  G9 C2 c' \* X( L$ ^% ?    EVMC6747_init( );
: K0 H; O( w: Y) W3 S/ D        /* Call evmc6747_intr function */
+ H3 s& k+ a% r2 P1 g    aic3106_init( );$ n) h8 e' V4 |0 K: Z3 l1 H6 U2 Q
        while(1);
1 V" v" p6 T- p- p- x}  H6 B8 b6 @/ O# [5 K  L2 n

& ^2 P. R7 Y- P' ?- p6 p* q7 r
, S8 `9 |8 r0 W+ E( `% g- Naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 \8 M( t6 W6 d6 h. d* I" v
/* Initialize MCASP1 */$ l5 X( m* W" J& g. o7 k) M
    mcasp = &MCASP_MODULE_1;; ?4 i6 t4 i8 A; ^
    mcasp->regs->GBLCTL  = 0;       // Reset
8 T2 s" W: p( ]+ }& n    mcasp->regs->RGBLCTL = 0;       // Reset RX
( p; X/ J; {' r" Y    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 i8 m9 l) ^% `) m: M- i4 p    mcasp->regs->PWRDEMU = 1;       // Free-running% u! X0 T! g$ s) Y+ p9 ]
   // configure McASP0 receive registers
. h" ?! l8 {1 v! k& ^$ w% U8 Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& L& K% g" y0 |- ~    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 q) L0 M, t" N1 U" a    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 n0 L% h- ]5 c; z% ]    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' r8 {+ U  Y! M( o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 [, u" Q- s$ Q. h+ A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ Y% |- Y# ~1 I0 U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 s) C5 z/ A, ^5 b- |; i' \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 |: ~$ `8 I2 [" e/ n0 L0 F

' K* j/ T  e0 b$ ^! _3 j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) r7 ~$ _$ v1 v5 s7 ~3 V5 v    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, t4 Y( H; F1 C( w7 Q* K- B
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" \7 z  U; K; G* L: s
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* h6 O6 I" c. P- m0 O" _$ v2 J, V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' _7 Z2 C5 ]8 y, m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 M. r. X& k; H+ ^3 r; B  p5 |! F
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. [( H4 c2 F  J# L# u. P" T) h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( ~$ K  ]! ]. b/ U. N
* J  ^' l0 @3 D  C: r, t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 g) ?+ N: T1 ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 O) q0 q7 k7 v9 b
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 h  ?: |9 X8 A8 L6 w; m2 I5 E* Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 S$ z3 K; L3 r& N
$ s3 [' N  o  `9 \5 W    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 M  ?* H; _- u* Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( C) ]0 X  {( H, N! A: O  S6 U' B( q0 U    mcasp->regs->AMUTE      = 0x00000000; // Not used. U6 I; B4 H3 q: C9 d& B" q4 x' U
6 ?1 T# P6 w  O: H9 b6 q. J2 @' Q/ ]
/* Starting sections of the McASP*/# ^) Z. V( p' _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' l/ [+ p! l6 }7 a( d3 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' S0 Z0 U: {/ a; m; J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + x) E8 K) L8 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 l0 L$ \1 i! N# F/ s' @$ i1 B) b7 D' g; B5 {* ?! a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 D; O- n6 [  u. t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( N6 W8 U4 D6 q! Z  {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " T& R2 ?% }, ]( n6 K9 D! y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- }1 f! G. p, W& W. ]# D
3 H; J/ a) I7 L* E3 \9 l- f! S    mcasp->regs->XSTAT = 0x0000ffff;
. B! Y$ a/ h! ?, l  l% ~$ r: \. g( ]    mcasp->regs->RSTAT = 0x0000ffff; , S0 }# Y# [2 z6 N) H$ x. [. y9 o0 Z
5 |( O5 e2 B7 N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 ?5 I& M4 [( g3 p( d( ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! r# ]) b/ n  g0 y0 s/ }2 {- U# W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " W5 G* C+ K& ~% v' R, m, z9 |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ ?. `2 {; y- \  G* `
0 r' U4 o8 F% e5 o! x    /* Write a 0, so that no underrun occurs after releasing the state machine */
( H* z2 e& @6 {- D2 j    mcasp->regs->XBUF5 = 0;
: y/ l! b& U" N& O: L    mcasp->regs->RBUF0 = 0;0 v! _+ |( o' p

/ e; C: v" |5 t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! K8 P! Y7 I) l; @5 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 Z# X0 ]7 y. T2 L$ ?( P9 a8 D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * q6 C8 S. [: l1 @' P- A5 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' ^1 Q: m5 U: C+ q8 T. ^7 o& J- l0 \+ ^: u
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% G; i: P: ~5 T7 M; X- P1 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 y' r! ~! P* [" D8 g4 D% F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ a, N) D/ t, E* [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( {) m/ C/ a! e9 q+ |$ H/ W; I& @6 ^$ ~, t0 I
    CSR = 0x0000;
: W% M( I5 g1 C  c9 O+ A    INTC_INTMUX1 = 0x3d;
# a3 e' a4 l* a    ISTP = (unsigned int)vectors;  x1 W; R* X$ h5 Z( k2 D0 @; R
    ICR = 0xFFF0;  
5 q; ]/ `  }" L, m5 \    IER |= 0x12;  : r+ i1 }" ]0 a2 P  z
    CSR |= 0x01;  * J# k8 q3 ~3 V: c! l: X

5 i$ T4 F" `, R: Z1 l; t: i% @( |3 N  [+ e% e3 l
& r: z5 y. W) |$ f- }0 T, f! v( B
还有就是两个输入输出函数:
5 v1 Y2 v2 K9 |4 Evoid output_sample(Int32 out_data)( |5 T8 T' o5 j+ ~/ N- R. L6 u
{) R. V# q. ?6 p& f5 b, ]
  AIC31_data.uint = out_data;  " V! y/ J$ L6 s; {% O+ Q: j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ l- S1 ~. N* `( ~}
) A. x0 T/ Y6 U& t5 ^" }5 P& M9 y% j0 O4 q* G
Int32 input_sample(void)
8 g, O$ D" {/ `! P4 O{  
' m! x+ z9 G+ U  w4 }  Q  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ }  E. C0 V; c: c& p  return (AIC31_data.uint);' S  H) ?8 q! Q/ g$ k4 O
}
( E1 }5 o* r0 v% j5 s* @/ ^9 W: d8 H7 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, 2026-2-26 23:47 , Processed in 0.040314 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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