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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 u) n4 L4 _" C3 _- v
main文件:
+ c! f2 v7 A" Einterrupt void interrupt4(void)  ) O& d  |' E1 i: `7 @; x
{
1 P# D8 }. [- Z( \) s% J( Z  Uint32 sample;
4 w$ G) L7 B% m( `2 {5 K5 P6 [8 T6 D$ J9 R+ v, y
  sample = input_sample(); // read L + R samples from ADC
2 T2 @% f. d- e8 o5 n  output_sample(sample);   // write L + R samples to DAC
" L4 k/ h) S9 I3 V/ A  return;4 v) F: _; d) e' ^' n% m$ }0 m: x
}6 n1 R' E) E+ ~+ z0 P
  j1 {2 S& {/ _. W, m6 |% F  @; S
int main( void )
" A, Z& X4 L  M' E' V) \{8 T: z/ R7 d. r9 z3 S" A0 N
* ?; [6 V  J  [% l4 ~
    /* Initialize BSL */4 U  ~5 |( @5 t  C1 n+ p5 y+ H
    EVMC6747_init( );# q& _- n$ r7 Q& j. f+ h
        /* Call evmc6747_intr function */
6 K) q! X' A, \8 E) R1 m4 y    aic3106_init( );
& W: r7 F5 ~; ~& E        while(1);# I7 k0 D' n* }4 G  m
}
: M' [! I" [- E2 y
! b/ l! Y  P- J6 K$ `4 S& c( r. y2 ~+ w3 U7 V/ m. J2 |, J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 r2 h3 U" X) W* B% ~/* Initialize MCASP1 */
. _9 W" M% W. l; C4 [: M    mcasp = &MCASP_MODULE_1;' o5 p/ R+ k/ A/ [3 D+ }) s
    mcasp->regs->GBLCTL  = 0;       // Reset
. o9 U% W& l: b0 z( `% t6 x8 X    mcasp->regs->RGBLCTL = 0;       // Reset RX; p  O0 U6 y  y" E+ e
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ ]) m8 J3 P. m6 ^% O  }0 {7 ^    mcasp->regs->PWRDEMU = 1;       // Free-running- K# j1 p$ k' Z- R
   // configure McASP0 receive registers) C+ Z. p6 o; F: p# r- _6 Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( }1 }9 m* T& K9 x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 S- K# t& H$ l7 z2 q" c/ V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ S0 R) _2 c7 ~6 U) o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( w5 p) B+ U  v# S* f; A
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 n" D) L0 g8 D    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# U# ~% \' f% n
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 x6 ]7 A+ Q, Z, _5 h! }/ u    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 N* Q" |3 ~) b+ X# A% O. y3 `% d8 S* k. n( ?
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 ?- h) B9 O2 t    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 b, p2 t2 F3 e9 p8 d# a" [$ l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. d* \. W9 S2 Y: Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 H- R! k  C3 z, g    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% [5 v8 P% h" q% h; ]" n    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. v5 x' V5 @2 Q9 M$ f4 C; d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 F9 R& P1 c" w2 ~* a5 ]& p    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  z: W6 R( c5 U% ?0 F0 _' F* R

6 O2 D8 b, j2 l8 L$ U" v* i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! G! u6 t8 |# j  _* a; M9 a( g- n
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' k+ {5 n5 s3 F! x    mcasp->regs->PFUNC      = 0;          // All MCASPs
" W+ P/ [& b% R, V    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* V0 _1 e$ s# P6 j. r

6 |) P0 O; {( ]; Z/ |) S8 H    mcasp->regs->DITCTL     = 0x00000000; // Not used
, z2 d2 i' u& P. k    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! m/ Z, W4 b* S; [$ a, e    mcasp->regs->AMUTE      = 0x00000000; // Not used
) ^7 Y7 i: G1 @5 ^0 Q, G1 u; c
: M* u8 k0 M* |: P; M5 p1 K: U, P$ Q/* Starting sections of the McASP*/
! I2 o5 X; \+ g. a$ P    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , N! F; v- O' S; u+ n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / [6 p, {1 b9 v" Q7 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 l/ ]) H) Q0 v& w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 t' c0 T/ O/ G  c1 V! r3 j$ e# s
  w9 [( K7 `6 s1 D# p
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / Q8 y" s% B/ m! K  d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 {% v; c* k' V/ K( u
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # R' t' M  |0 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, p$ j' T" Z* f; k( C3 a
+ c  V0 B+ A9 m" g% H& E' _: ~; R; K- I
    mcasp->regs->XSTAT = 0x0000ffff;
) V3 c& P6 S- J    mcasp->regs->RSTAT = 0x0000ffff;
; f5 v$ o3 K, h3 r2 b% |0 {  m' b0 ^) Q, E5 C# X, k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 I$ T; F0 W3 u, ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 z. C9 R2 P4 F' _" u( O  @    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 t' Y6 C9 {0 i0 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 p" ?6 g9 ]- a: o9 \
+ E* B! Y( X& q5 e
    /* Write a 0, so that no underrun occurs after releasing the state machine */+ @- g/ Y1 |0 s: T0 v
    mcasp->regs->XBUF5 = 0;
/ j1 h1 d' M/ E7 |/ D0 N    mcasp->regs->RBUF0 = 0;0 S7 _3 C3 v8 u- S

* f! e/ _7 c8 S) o& T    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( R2 G( q4 {+ L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 e; S) W5 q# W  v  F9 G    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ U9 B9 |: U9 h) h* H  z; M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 h/ r( A3 U9 v; S% m1 A$ N" V
/ X9 X6 ~/ P2 h    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* ?0 R, q7 ?& H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 r( \; E+ x$ d/ K7 g4 j5 }7 N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; r' Z$ B6 y- R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  y* V; h' m$ v$ }4 @! O
9 A/ b6 z. _$ o
    CSR = 0x0000;9 o) G' |2 c; {+ g
    INTC_INTMUX1 = 0x3d;
7 d2 @8 i# o$ T2 m4 `; y    ISTP = (unsigned int)vectors;
4 _) O/ N/ v6 {% X) K    ICR = 0xFFF0;  
6 u$ m* K5 R3 C9 O" l: U1 |    IER |= 0x12;  
2 w) h4 T3 B7 E4 ?* `# r    CSR |= 0x01;  ) Q0 P7 }6 ~7 ^0 K& ~

& a, |( l8 ^- F# c6 F. A' h$ T; N
2 }4 X  d4 G- t$ E- g* c
还有就是两个输入输出函数:
8 w5 W) N: @5 P* J; H  [void output_sample(Int32 out_data)
- q8 y5 V3 ~0 j- H; l8 K{* u, O; z6 Z& Y9 l3 R
  AIC31_data.uint = out_data;  9 _) y9 B1 a- ^# j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; x; s% d1 U5 g- X" A}
, G& I1 v2 b: _! Z. Y" F9 a- {9 f  V. N0 W* Q5 g
Int32 input_sample(void): i& H' X, f# R9 Y9 E. U* `
{  
7 i: k$ R% `, S  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, s" ?. d9 F; H  return (AIC31_data.uint);
) z: }) |5 W# \. l, q+ U6 w, y}
8 k9 r2 i1 o. q( f, p' {3 d
6 x$ A3 d2 ?/ q2 Z
分享到:  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-27 09:45 , Processed in 0.042129 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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