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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) F4 W7 f$ z2 Amain文件:
  x1 i- d. D) Y$ R4 rinterrupt void interrupt4(void)  $ s9 O4 E0 l! j/ P6 i
{
1 h2 @8 R: ]2 |6 H  Uint32 sample;
9 V) V4 k: m( m( @! ^8 q: c' F$ x8 a
  sample = input_sample(); // read L + R samples from ADC
3 z. S8 Y" l; a! n" C5 S& \0 E  output_sample(sample);   // write L + R samples to DAC # E" P. @2 r& r' v" c  e3 \
  return;
3 o' q4 n6 ~/ N9 A5 t! q% p6 Q}
8 N! a. Z: t$ h( Z
0 v6 x3 v( P, k6 X' _int main( void ): i8 T& S0 g: ^" m  P, X1 g
{  d4 @: F8 x9 L$ ?% _( m* g

8 W+ }& }1 H) f    /* Initialize BSL */3 X  ?3 Z6 }5 k% I
    EVMC6747_init( );% G+ W( L& X6 s2 S; `* u4 w
        /* Call evmc6747_intr function */
& P0 x: `8 W# |5 V" J    aic3106_init( );5 G% h( Y9 S  ?# j& H0 Z  O$ I
        while(1);
- U& v2 T' i1 g3 m" l/ c4 T}
" ^5 X: }0 c, _$ `6 r
2 R- ?* ^4 V' p7 e
7 ]) K- e2 q! i5 P4 ?+ gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ a' s) ^& _+ w8 f  Z( e/* Initialize MCASP1 */- f+ t4 g/ `" E
    mcasp = &MCASP_MODULE_1;
3 h. j6 V2 k/ s1 C6 o    mcasp->regs->GBLCTL  = 0;       // Reset: U8 O" [0 q; T8 j1 \* G
    mcasp->regs->RGBLCTL = 0;       // Reset RX
; v2 e: m+ k: Y1 q    mcasp->regs->XGBLCTL = 0;       // Reset TX
# G8 s9 ]' R0 [5 c    mcasp->regs->PWRDEMU = 1;       // Free-running
0 P- T: W1 ^; x1 w8 f3 K. q+ k   // configure McASP0 receive registers
& f6 V% s2 p) k7 \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  h" ^" T5 x( k' n1 s1 I5 Y0 B9 U7 e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 L/ E4 K; x4 A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 l- [' p. X, m5 ?9 [    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  G& m$ `+ q2 i- m! ?, z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 k) y  R2 l0 F" t
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% s, g+ k; J* a1 g4 L( t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 J8 u: o: M& U0 ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 z1 _# _3 U' W1 [$ G# v
% O( I/ \( p+ P5 P5 e
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 }. Q3 C% f0 o/ C
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 H* V/ n+ N9 Z8 v
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 \4 k5 Y: t4 ^4 T% G4 ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 `! L3 W. B4 A
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* C4 _& i+ B! c7 C! U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ A9 c9 b* U3 P$ w' Y" ^$ V
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! |& q5 G- U7 K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& l# T. V( M5 m% z; w- f; z0 x: H4 m: g# U; s0 D
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 T2 v/ P7 ~. h2 U$ i
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% \: V1 `1 v# d0 T  E' {! {$ H
    mcasp->regs->PFUNC      = 0;          // All MCASPs! a& q4 L4 Y+ s  @: v+ k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ S) e. Q5 V7 H. c  _& q7 g3 g
* U# W- T+ E. O# F
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) u7 W. z0 j1 Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used" N* r# ?/ G3 X* w& y- v- E1 c
    mcasp->regs->AMUTE      = 0x00000000; // Not used* X1 P% Q/ y0 _6 |" P8 r
  m4 H' ^' ~; P
/* Starting sections of the McASP*/
) j0 r: S' d( \2 \- _    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( P% {" X9 K, @' o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ [/ e. V% B8 L6 C" F    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 m6 J4 r7 F: s. P# U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) p4 C/ j* A- V* ]) u

* P4 V. r9 m. F7 V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & D( G; t6 `2 R& f0 v( H4 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. u: X# \/ c) P6 M2 g. V6 o    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 E4 W  H. `9 X& x8 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ ?3 K4 y" j) e. B- S- x" S1 P5 x( q, c; U3 a8 M
    mcasp->regs->XSTAT = 0x0000ffff;
$ T, N$ h" q4 T  B    mcasp->regs->RSTAT = 0x0000ffff; 2 J8 t: _2 y" M* v  }. h/ }
% v1 l: ?* u0 G7 B. `1 i, h3 J- o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' S8 J. Z5 y  R, h* \3 o7 ]. W; M6 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. Q/ y, W) W! Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : u  p/ d5 @# T7 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 [/ g! z# l6 }# `4 r" B
) U4 b( j) P4 E3 w5 f' I: [0 z' S2 s
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; L5 S/ P8 [, m# L+ k: K( a    mcasp->regs->XBUF5 = 0;
  M1 \; V+ t) y  h) [    mcasp->regs->RBUF0 = 0;8 C; C) L; ?; @) x' ^$ d

; ^, n# Z8 U! ^    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % \9 y$ x# m/ J. B. Y3 o! i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  o7 K' M, R6 Z7 V9 @$ b    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  ^* W, \2 j1 Z' w- \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 ?8 H  K# }5 m4 R! K+ K
" z: `  d# `' t7 w1 k1 e  X3 M7 A; G
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 ]. Y4 P# A# O& x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# [( Z2 `# {2 q: ~: k1 [+ o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - o" X$ z2 D: o& D; Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; C1 @4 S, l1 j+ P0 R1 J- ?: P7 u3 S" w  f, p6 ~0 d- Q
    CSR = 0x0000;4 X  H7 P% R: ~7 N" \/ L5 I1 _# O
    INTC_INTMUX1 = 0x3d;/ x. u7 M- s: F  t: _
    ISTP = (unsigned int)vectors;1 P' P9 l6 J  e% G3 W4 P
    ICR = 0xFFF0;  
. M" B4 `: d; G! T6 k    IER |= 0x12;  
+ L3 O9 d" m- ]/ Z    CSR |= 0x01;  
) m8 R- S/ P, l; J- S8 N& @7 }8 P2 R+ e3 o3 f: I
/ {1 L( r. i% j5 G2 j5 w

# S* }2 J) a# z, p3 p1 x' ~1 p还有就是两个输入输出函数:+ O# w  J# t. V8 L" F9 I9 c  g
void output_sample(Int32 out_data)1 e  m  L% E- N! T
{
8 [! o3 a: p4 C# s; ?1 j  AIC31_data.uint = out_data;  
4 U* k+ X; D1 e  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) q4 f; @# u: q/ B- R) h# @/ ^2 k}; t7 I' U. z- W4 H& C
$ q6 }& ?+ ^( X1 H
Int32 input_sample(void). B8 A# F- y0 o% P
{  1 P4 M+ V4 ]" p. D( c0 j
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) I" C, B) j' P# a1 H# t" K2 F% P  return (AIC31_data.uint);
9 |. c7 N8 [/ v( [* i}
/ F" z% m  r" E9 M. v) b+ w5 D( K! n# Z% e7 ~0 H/ h1 r! g! U. N
分享到:  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-3-7 05:59 , Processed in 0.047747 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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