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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. n, x4 s0 H: X' O+ v
main文件:
( }' j! h0 u8 a0 k/ C$ N- Dinterrupt void interrupt4(void)  
0 B: D& s4 C8 A) y2 r7 j9 J{! p. A: H. }' p: n1 K
  Uint32 sample;/ S6 K4 P4 }7 z. V

6 Y" |: |, }4 Y2 U6 h7 I( c  sample = input_sample(); // read L + R samples from ADC* v6 b& J$ k; q
  output_sample(sample);   // write L + R samples to DAC & v, G) V& T4 j' v0 o* k
  return;% t% C& t4 B2 M$ c  I' s
}+ N+ C8 I0 l+ d- W, [# p/ R2 q

+ g6 D' M# [2 S9 B, Cint main( void ); H  F# @# v7 y) A8 J" T
{
8 u8 K: N& m5 S4 v' F6 |
1 P  C: n/ v- p( h    /* Initialize BSL */
$ c$ _. X( s7 Y; Q7 N; k    EVMC6747_init( );! V! `1 b6 \1 C) J% A
        /* Call evmc6747_intr function */
, T3 N" D& l7 o/ r0 S. A0 |    aic3106_init( );
. f' X/ [, F( d( d8 ^3 k        while(1);
% ?7 S. j8 j% V+ E) M, x) E5 {, o}
) J  Z& C% y. N9 e) A+ e2 A& |: H( j: z# k4 S; n& {/ ~  y( V) d' Q

- N! J) K0 k5 L/ aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ i! ?: d* R( r/ l/* Initialize MCASP1 */& J9 l7 R3 R6 W; Z7 n
    mcasp = &MCASP_MODULE_1;
8 M# f3 u0 r6 A) b  O6 B5 _7 L    mcasp->regs->GBLCTL  = 0;       // Reset! h. b# W7 w* R$ u
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 G; ~% s1 Z" S! S! B5 p+ H
    mcasp->regs->XGBLCTL = 0;       // Reset TX
" {( E# b( g0 W2 v5 w( ~% y    mcasp->regs->PWRDEMU = 1;       // Free-running
4 w# X: r# E% g1 ?   // configure McASP0 receive registers- W( j8 K( ~6 d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 G8 V% C" A" l: D. P& q  r  q* b/ ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  N% w  |1 o/ J( K& Q$ [
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 f& g( q' b  U3 V' j% \$ y# e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: ]' z) ~1 z. g7 M$ ^  H- o5 K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" |/ d: G, T$ R- [' G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) l2 s# P( N9 G0 Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- D7 T  x: u: @0 x9 S    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 _1 }2 d$ k5 a4 F8 M
. |5 ^3 Q: o* C. ~
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, H& l8 D% p$ \) f3 N2 P% D' p    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 l5 v* U" ~" s# \    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; w! X) |0 ]4 U7 G" a    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 }1 E: l+ c7 t# k) J% v1 r$ T9 x    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- {5 B  \: }0 Z: C4 N% B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- }- w: X* h2 |  ~! E" u% L) e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 S& J) r( G5 \0 g/ g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- @" M- }3 f) _( w
  v- e* ]- W* o% m3 i% I
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! t( F9 f, C' [% T& [4 x    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 L0 G7 @) @1 F5 a    mcasp->regs->PFUNC      = 0;          // All MCASPs' G& W' {6 d9 S2 |- j) A" E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ G  m+ a+ f! V5 t# O* @9 r2 t' N9 C" p9 O# D. {4 M) p7 O8 H
    mcasp->regs->DITCTL     = 0x00000000; // Not used" S  q, L0 Z! G; e# N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' [& j9 k7 I2 [& J    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 r/ g+ m- K+ ~  u5 g9 M8 C, q$ `" H! ]1 O" F# ^9 A) T
/* Starting sections of the McASP*/
  }; a; J7 c! ]5 k$ A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( i. s% i* L  z" @$ ~, g) n3 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ Q  O3 l% c0 J5 V- B+ n- z5 W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; T& @  Q' E9 b$ Z) ^1 P0 c( a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 p- x1 Q4 e7 s, }( [, p0 b) t9 f# }; u! q) H6 n) a/ H/ [
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # Q3 W, D  q% q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 C) n" B' p" g6 |0 X    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" [) }- {: m6 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 [- H. j8 c7 Y3 v! ]7 E( Z
- L5 s) v$ h" E    mcasp->regs->XSTAT = 0x0000ffff;   [& D9 ~, n( x; j
    mcasp->regs->RSTAT = 0x0000ffff;
# }0 B( I) \7 i# @
; \3 Q* u7 {6 ^) I+ ]    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 o' \3 H5 |6 m- b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  K+ U0 v# l2 k( w. D( A
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 u* f1 H2 f, j7 O1 f( I4 |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 R0 p+ \. S$ W* v$ W/ a

# `* @) _9 e3 q4 |+ m, q7 U) X    /* Write a 0, so that no underrun occurs after releasing the state machine */8 T+ ]) b$ \! q# n5 j# q/ |8 y
    mcasp->regs->XBUF5 = 0;
6 P3 r  r- X$ `- r6 B    mcasp->regs->RBUF0 = 0;( f, z* I! O6 E1 Q) }( y
2 R  \- j% w! S& D' Q; Z6 g) t
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 T* U3 p+ w0 `7 h0 V% z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) n9 J' D  p* C3 C& v) l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 ?% ]- m- P6 ?$ Z0 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: a6 v, ^! C# B' Q
( ]/ [8 ]. z0 l2 r- R7 f7 O    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 D2 v; j& P& ^$ k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; M3 F7 o3 T# K( I) n: d* B    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 q* D% K* s& M4 W' {" e$ _! S" w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  P& l8 P5 j4 C# I' j% k5 u0 H
% T. t2 A- E* g3 _; }3 H    CSR = 0x0000;
/ F/ L6 }7 H: d( K    INTC_INTMUX1 = 0x3d;
! V$ Y" _$ T" ?7 p5 {  d& X    ISTP = (unsigned int)vectors;- n3 v2 z, ^3 Q  W
    ICR = 0xFFF0;  1 [6 N+ k. e- _" S+ m9 O
    IER |= 0x12;  
, l; i. N$ y2 F! Z5 ]8 ]8 B    CSR |= 0x01;    R5 ?- w! j9 o6 V, V( |
6 i0 a  {7 z, X; p, p! K% b

# F! ]6 t# D" I8 F8 T/ b
8 h/ }1 t' v* @% k2 u  P7 I还有就是两个输入输出函数:
" E1 d/ S$ p* Z  {" `5 y1 bvoid output_sample(Int32 out_data)
. M4 C1 P4 l# G4 H' s{
( H# U. Q9 U  w  K- c: I9 d  AIC31_data.uint = out_data;  
7 `' ^( e6 a0 }0 _% A+ m  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# l+ z& L  C' \3 N- x. Z+ C}0 D$ a( D( V4 a$ m- C% q  V9 V: b

1 v& |+ i2 v- X+ [Int32 input_sample(void), l( l( ?3 Z1 Q+ k  Z- X3 ]9 j
{  * @+ k8 ^/ ?+ X' g. P) F/ T" t
  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 x$ F1 X7 |, W. I* c& t
  return (AIC31_data.uint);
2 b! i1 y: X- G( X: B& I6 ~( ], T9 S}
3 o8 m& T! b  @/ i" e! t2 Y
' b% E1 j. c% H* s& a) S3 [% 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-1-23 21:22 , Processed in 0.044488 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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