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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* T' T" T- a$ h6 fmain文件:6 E* a1 S! W( m& k8 \  B5 _1 I
interrupt void interrupt4(void)  
# M  V) f& U: g5 S/ g/ x& a{7 R' e" I3 v1 ^! A
  Uint32 sample;5 o. ?- {8 E. g1 M3 x3 ^& f
( M* s4 r5 L9 ?; E" E. J
  sample = input_sample(); // read L + R samples from ADC6 x2 A2 b+ k) J7 I+ F0 Y9 B
  output_sample(sample);   // write L + R samples to DAC
. V1 [: }9 C, S/ G0 n  return;
( s, |4 Z+ a' Z; C}& {3 P% U/ ?: M) o2 J

. b5 x& d8 S9 ]/ Pint main( void )
+ I( t) P. }. G! N{
6 V7 x" n+ l9 i4 f  }; i' ?9 G/ ?1 F, L1 R
    /* Initialize BSL */
4 p( Y+ v+ a9 a! |4 x    EVMC6747_init( );
+ m1 m5 J9 f# Y. t3 w        /* Call evmc6747_intr function */
4 e# i% n0 g( P3 }/ d" ^    aic3106_init( );
. {1 w6 |( K- C8 L  x0 u8 t        while(1);
. a4 j) n  J2 ?}# Z" k7 a% E3 ?7 r  V+ K) F7 l
, G2 A* Q1 [8 L. M9 Z0 E
. L7 u7 m' B- ?- g" y2 R0 L5 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ j  v  }) d# p) G" n* S1 v# v2 ?
/* Initialize MCASP1 */1 I3 Q0 ~9 n+ P5 X/ Z& ^0 _; ~
    mcasp = &MCASP_MODULE_1;  d6 r/ ~; [# X( d" [( z' H
    mcasp->regs->GBLCTL  = 0;       // Reset
2 f6 ?, F& a5 ?; k! X6 ?    mcasp->regs->RGBLCTL = 0;       // Reset RX' S# x3 L1 ?. g  z/ u5 a1 g! K
    mcasp->regs->XGBLCTL = 0;       // Reset TX
. A; c7 V" i& @$ F    mcasp->regs->PWRDEMU = 1;       // Free-running4 e1 k$ E+ N4 n. o6 a7 ~
   // configure McASP0 receive registers
4 X" S/ d" r1 w' Z) z7 L    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, O# p" W0 l, ~9 \- h
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; U" n1 w! G# i' z5 e
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) Z* B, @/ s0 u- A6 e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 ]$ b8 \* e7 r; F( k
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), O& z$ [, F2 r2 g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. \) E" h; p) P0 G5 L) z
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# `  d  ]3 v  _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 u% s" n- K# o) T8 N8 c0 N

- C5 X( i* o% S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; I7 c& D% ^6 O2 P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ a6 W2 H: ~2 G1 a8 O7 t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; E' H5 N& i" H/ p/ P) M  [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! G3 z7 [1 d# `! x
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 v$ I! w" D9 o; P: p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- D( J- }& u1 y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 y2 [! ~- i2 t3 n6 o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 T7 o1 U7 A; E1 {) }& Z

8 H+ g* @9 p6 q2 n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 U8 ^/ W! D* U% B2 D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ Y9 }4 v- F  i$ c, p/ M" F" k
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 J3 ~* B% `+ c3 Q' S% n1 _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- g  e7 m4 s3 `" E

; E+ Z/ e5 A$ y. P# j    mcasp->regs->DITCTL     = 0x00000000; // Not used
' `1 n. c9 i$ K9 `" I' u6 ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 {8 G) X( s( x* `1 N0 ~    mcasp->regs->AMUTE      = 0x00000000; // Not used, {- j) x8 P0 i1 [  R. c  N; U4 r2 B
4 |# I" T. B# J
/* Starting sections of the McASP*/
  T3 g# ?6 [9 u7 b. Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 M- i: k* C! h+ |  ?' ~7 M6 H. a; z9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 S/ n  v  P! ]' o3 I; @9 w$ ~) Q' H
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 t6 o/ k; v3 h% \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 j* X& z7 j3 A3 |
# t( K! ~2 ?8 k: R& M# r
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   Z+ l  O# T( K0 z/ x) s% L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" v8 s+ x! U* Z5 Z% `* u: P    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) ^, O: L. m1 ]6 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ q) c  K3 J2 V$ g' E. p: A+ {
) D2 s6 W0 M4 \4 C! A% ~
    mcasp->regs->XSTAT = 0x0000ffff;
# E9 ~$ w% d3 }1 j    mcasp->regs->RSTAT = 0x0000ffff; ( d% A# X+ z3 I2 F! s
8 _9 i+ Z. @8 y2 H* a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  ?2 L7 d8 `( t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ]3 h+ T1 h4 V    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 B  y( E+ a, R. E6 M7 z9 O' T8 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% c# m, n0 b+ |: P
: s/ n! m4 i1 @3 o( S/ n4 _6 H4 g    /* Write a 0, so that no underrun occurs after releasing the state machine */* J- V6 w6 |* L" A
    mcasp->regs->XBUF5 = 0;: C/ U; d. V+ v- n3 r7 n  ?/ n- j
    mcasp->regs->RBUF0 = 0;
; V2 I$ g6 ?4 g/ U$ v/ m; m7 t
# P+ d# \+ V& c+ m& n    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) G( A, {( u  F! f# F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ F, r) a+ y7 ?' }* l6 f& h& o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 u  ?$ v. E8 w; M. l/ F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" q+ B, m' R( Q% o. u0 _# @& s2 \, m3 Z' r
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : a$ y: y8 ~* P. z6 y( |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! I) i0 A  f' }- R1 N    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 B6 ?  l9 e8 t; z  V+ \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ h  y% |2 |1 J5 E0 A

4 @' d, e7 }/ u1 O3 K    CSR = 0x0000;
2 q( y& t! h' a; `, Y    INTC_INTMUX1 = 0x3d;, Y) ^1 w: z5 s( w' E
    ISTP = (unsigned int)vectors;5 E* y$ R3 ~# f4 K' H2 P: q
    ICR = 0xFFF0;  : _! I- g5 ?) u( V; C
    IER |= 0x12;  
% B8 X  M- f; B. M1 `    CSR |= 0x01;  ; n  ?# R/ u; ]
/ o  R9 Y1 \0 x+ x# y* H$ N1 r' K

' j6 `* N0 b1 P$ |! ]) w2 U0 x7 g/ N0 X% g! k. a. S; v+ w
还有就是两个输入输出函数:
( D; l! d$ U3 N2 zvoid output_sample(Int32 out_data)  k8 P# n7 j5 X* x; P+ E! o
{. _& V- E: B- ]" t
  AIC31_data.uint = out_data;  
6 r, f7 }. n& T0 O) ~  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 D9 R3 A/ i- F# ^' G}
# V- F( J) Y% n) h4 {6 [* n
/ S* o( R) H6 s5 Z3 [5 }Int32 input_sample(void)
) A* A( D! U0 \: Y: O; h" _2 u5 y{  
/ T0 k% @5 ]4 c: _& d0 }  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 r9 g) L$ P6 S& E: ]# a$ p1 z
  return (AIC31_data.uint);' p  i# f7 k+ `- A1 M
}
7 U# U+ s% o4 L2 k+ ~, U; A  o0 Q! B- W2 G7 [# ~
分享到:  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-5 16:19 , Processed in 0.036357 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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