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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 d! Y# a3 T8 r9 [: Smain文件:! O% f/ Q/ d; d+ @
interrupt void interrupt4(void)  , z4 d( `$ a. T( F
{+ ~( r0 E6 {( U% R
  Uint32 sample;
3 Q' F- s9 x- t+ B1 p8 o+ \" X- Q- f# f- k2 s
  sample = input_sample(); // read L + R samples from ADC$ w6 F" e5 @  G( r2 t$ q+ d
  output_sample(sample);   // write L + R samples to DAC 8 h/ m2 e4 W! k* |
  return;
8 D9 k5 I* K0 I- [4 e0 O}
9 }+ I( U: {% X. `* z" @' M
" p; @5 C$ w: p( W- y7 W4 Kint main( void )
; {' Y. c* U# Z$ S1 e{
# G& T7 O6 B8 k% |" ?9 s5 p, ?6 G. ~$ {
    /* Initialize BSL */
9 f) }, X3 g) W    EVMC6747_init( );
5 ?$ M6 o3 ]6 ?0 p- p( f7 Z$ b/ D        /* Call evmc6747_intr function */- B( b) ~4 K7 h
    aic3106_init( );, T3 Y2 ?. X+ B% N  c- h$ ]
        while(1);
5 B+ [# W& N- m$ n2 L6 c3 o}9 i7 T% ]6 Z9 c' ]6 E" Q

6 E+ X  y7 u2 A
/ D0 U' u- ^: ]/ g! Y3 z* `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) M1 K& Y; ]$ E) f/* Initialize MCASP1 */) M) s+ u! k! R6 p7 U& V
    mcasp = &MCASP_MODULE_1;  e$ u$ _* V9 K
    mcasp->regs->GBLCTL  = 0;       // Reset
5 }8 T: i/ a( N7 }6 D9 U; x' O+ c    mcasp->regs->RGBLCTL = 0;       // Reset RX7 ?* n) B- O: P+ L  U- S' t
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# o% U" ^  g6 v    mcasp->regs->PWRDEMU = 1;       // Free-running. F2 {9 X8 o8 A1 x2 V
   // configure McASP0 receive registers
+ o5 @- @# ~; H, R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ q4 \) g( ^* p' ~  K& r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 u) Q  V4 R2 s% s
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( H% H7 i9 w1 o5 x4 u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): {1 t  p7 H# y" {$ Y1 Z& _% j
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" l3 l- b- _  o. @. R
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& L1 Y# A* ~, Q5 m9 r% s+ x    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 G0 G' D- N% B% r; V( L/ _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ S0 M& y$ L& A$ j7 v. ?+ O
* Y4 K' n  Q1 K9 Q' U5 a2 S7 ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! R9 N* B* X% c* o% j$ l
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 z8 \! q- k0 D; x3 e9 w4 F+ D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' a" x5 _. \' `) u, y& x: R
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 H2 I, M4 I" T3 R; n3 @2 a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 I' `- Q3 Q& [. d+ M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* @/ o6 B% |6 M
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' C1 b# h2 L) P9 p( K3 W    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 e% a# d  x% a. f6 k
, P7 s( q. T$ D" z$ j6 F  Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' o0 g$ p4 F+ H& _: z( S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 J, {4 L. d0 _; ^
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 C& f4 E) I# C  r; q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* i; s* |( y$ k8 k: S+ p
* E- m/ Z2 S8 V6 q; f- p
    mcasp->regs->DITCTL     = 0x00000000; // Not used$ c3 Q( z% H; M0 |. ]4 o! _( M% @$ t  D
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ u; ?( K+ I, t8 E7 R' S& Q    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 b; i  l. Z! X: d4 j* o- h- x$ P4 T& w1 t9 S  I2 N4 `# S$ @
/* Starting sections of the McASP*/% t2 ]$ {' Y+ |* @' r% c
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# Q3 a4 l7 X4 s3 F- a$ k) W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- Q, F- j- n( G* b9 D1 m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) e3 A8 o( z- A% i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' W: e. `; h) I( L) ~+ t: L5 C' F

) Y9 P: h# H- x2 A$ Z8 x! X    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 @. E. L% |8 `! a! ~% p3 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 p; m4 j: T0 a- S    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% X8 @) ~) t* W) z1 l1 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 O1 G% c5 G/ X9 y, m
* e6 z/ A- q- b7 i4 O5 E! H    mcasp->regs->XSTAT = 0x0000ffff;
2 v% ]  ^; _) w! d, X    mcasp->regs->RSTAT = 0x0000ffff;
! r& P; M. F8 @8 ~; m1 w5 o3 {) D4 H. G: ?" D% J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 \+ g  _# l9 a  g( ]& w4 i: a5 }# e/ y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! C: [# a4 U3 j    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : U( a8 N. q" N; c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 `! T6 T; E8 t" ~6 @' t
: v! i5 |7 L: r
    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ A. B+ ?% L  X8 `( [& D4 Q5 N    mcasp->regs->XBUF5 = 0;& B. c5 ^& b( p% J" n
    mcasp->regs->RBUF0 = 0;
/ A& ?2 r- O% d8 i# a! h: h$ e' s% H* T& f7 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! U/ b  t- E, r+ f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 I# l2 r) G' a+ l& ^) m: E' o' `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # q/ e5 V* d" G& u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! u2 b* [# @( R; I4 e
, b% V. ^9 o4 p$ p/ I# U( D8 s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + W" o# }% b' C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 G* F: V5 E$ `" s- G, O  n0 P  d    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: L* d2 I. ~2 ?) Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ k' l# L! {6 a8 h: Q: s7 ~# `# H$ d0 |& n1 u( X: `# Z6 L& K; x
    CSR = 0x0000;
% E; c# u  `8 K/ }: R    INTC_INTMUX1 = 0x3d;6 Q% z$ {2 c: C
    ISTP = (unsigned int)vectors;% G, S8 N# N# x3 G/ J
    ICR = 0xFFF0;  0 k. V: d# X7 P' i2 O3 L
    IER |= 0x12;  
) s" N) S6 F. y/ l    CSR |= 0x01;  
- D/ G# ^3 @0 u: L; D& \( n/ Y8 ?# y2 D: f- p' y8 W& s) S

) y' \4 F' I) S. _+ o  T+ D- Y- r
5 }  A$ a  h" V% t$ |& \还有就是两个输入输出函数:
) M1 b9 F. m& M* K; `2 e# B0 jvoid output_sample(Int32 out_data)
# e, M- O8 \2 o# c" B3 s. r8 a; i$ l{
0 s; H2 p( a) _# J. j( l" @  AIC31_data.uint = out_data;  7 R& o# T$ ~+ e* ^" e/ b
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* t0 E1 e+ e8 i5 F8 ?
}
! V3 E0 |5 V9 H( L  |4 w! q7 Y8 i% n. E; U3 j4 G
Int32 input_sample(void)& Z  |, k8 z! n+ x* r' }2 K2 W
{  
7 R. V; w5 q3 [  AIC31_data.uint = MCASP1_RBUF0_32BIT;! q% j* @" h" B* Q6 T5 g1 n$ r3 g
  return (AIC31_data.uint);
9 }; D# S+ c% T/ p/ m}
' P" M+ U( s6 f9 F% _. [5 P! C( m% [, F: x( 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, 2026-2-2 03:50 , Processed in 0.048465 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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