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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! G& k) @) d; \, G% [$ i7 J9 e) y
main文件:
9 |: z# h' N2 i$ \& Vinterrupt void interrupt4(void)  
' B6 p2 t( i0 X( Q, h2 D  F2 E{. z9 ~( y2 V7 x7 k2 P
  Uint32 sample;
6 U( h$ {1 y6 x# N/ b$ \$ p, ?( ?, g( X. v8 H
  sample = input_sample(); // read L + R samples from ADC
( f, B6 m  X6 E4 j5 g  output_sample(sample);   // write L + R samples to DAC
0 l  q5 c" h" J: ~( `  return;" E  G. k) o6 t5 ~8 u9 U
}# z2 F0 L# l7 C# l( c4 J( {

1 C. {1 h6 c6 y7 Q5 g  Gint main( void )$ A/ Q5 u. O3 v$ n7 j; V
{
6 F0 J. g9 p6 ~% I* ^3 l9 A8 n, u# ]/ g/ K$ s, @9 t
    /* Initialize BSL */
3 Q0 N1 R2 P6 S* {. v! e3 O* M    EVMC6747_init( );$ I4 w* W8 O  P$ E/ x& t
        /* Call evmc6747_intr function */; ^% g# X9 Y! M$ G8 A5 I) N
    aic3106_init( );! ?1 h0 s+ |$ R( S' {
        while(1);
' G; [& W3 D) ?( C& _9 x1 W7 }# d}
3 v# r; ^( u1 H0 w" G& N, J$ }  I! o
' J+ v2 o  @2 e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! r0 s/ @1 S+ d/* Initialize MCASP1 */
, K3 q6 ~0 }+ R  X    mcasp = &MCASP_MODULE_1;( m8 w/ o7 Y* ?
    mcasp->regs->GBLCTL  = 0;       // Reset
9 @" w- m+ j5 _" o( J- |+ i    mcasp->regs->RGBLCTL = 0;       // Reset RX4 ]/ z4 V" t, F6 u
    mcasp->regs->XGBLCTL = 0;       // Reset TX) D9 P" U5 i  P1 o
    mcasp->regs->PWRDEMU = 1;       // Free-running" h% ]) r( V6 _5 Y4 l0 w
   // configure McASP0 receive registers( f" H5 ]5 b+ U1 k) F; a
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 t% j* K3 J% _% B& P" `
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! k6 ]0 h" ]* x
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  d- [: I. j) h1 D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, x% C; Z+ K6 e$ b$ N    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 k( W9 k/ L" a5 x# r% X3 _) N    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, m' f7 V, M, ^* [1 I    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 U, T$ h4 s0 K0 B
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 G% ^1 ?2 n' C7 ]% t1 Y- \3 j- p
5 M9 q5 Y: q7 |/ q' R4 _
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- Z, c  }/ L( M
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 i8 g* W' W( v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 \& w9 w( m9 w$ H    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- @5 H6 `- P# W6 I& n; t7 Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- q  @" ?+ ~9 K: @0 x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& T( t9 V3 a' u3 Y$ M! e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, s1 y% _6 |5 }/ H* p
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 ^4 e6 o- Z, |* B- {
% f+ n7 m2 @/ H3 b  a1 J, Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- C, K& O6 a! F5 Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 o' I: o, ^, A# |
    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 v9 D2 m; c8 d$ e6 l' m    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( y+ n) o- l' k1 j
( o7 s% I: D8 X! n% P4 x( k    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ M5 H% j: ?# t    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; T2 _* b9 g& r" ^9 g    mcasp->regs->AMUTE      = 0x00000000; // Not used5 y* p& W0 q4 a) U/ U" u% r

+ Q. d5 e' y+ b* p1 ]/* Starting sections of the McASP*/
5 O( G0 ^' s( D# V    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 q: }1 _2 S% q/ W7 K+ o$ i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 Y( Q3 K5 O6 s9 U, `3 n, r    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 L, L* O5 n4 `/ c4 L/ s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" i* E  \/ y) C# q+ l9 k+ Q* Z4 ?& |# v* z- b
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - K' i1 j* _( L; ^8 P0 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: ]: Z- u, `$ b, j* |& C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" {- H% V* i. j. C8 ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ T8 j+ `* D0 I
. {% w2 a& {6 }/ g0 o2 L* f
    mcasp->regs->XSTAT = 0x0000ffff;
) J4 q: D; S, p& a/ `8 Q    mcasp->regs->RSTAT = 0x0000ffff;
# t" N1 g; Q5 _7 Q' m+ S
+ L8 V8 Y, Z/ u9 j2 M& m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' z" B- w8 t  N0 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 x2 U  }9 a  I. j9 o9 u9 S- Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( @% e3 `. ^+ G8 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 k1 u; b) l0 m& o( S. d- k! w3 \* u0 }
    /* Write a 0, so that no underrun occurs after releasing the state machine */% `2 `$ K7 }5 l3 I: t4 m& A
    mcasp->regs->XBUF5 = 0;' O' G" R& V1 h2 K
    mcasp->regs->RBUF0 = 0;
' `  M! [! v- W( [) I
  O- P, C' S; V" J9 |1 `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 H1 x: @$ P4 ~5 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: `0 R0 H* h, ?8 M+ k    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ @6 v& @! S% t( W+ n- W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. G  A8 @4 b9 B/ q. l* s8 Y; o+ B+ Z7 M5 _
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# f( y5 w0 D& M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 i1 K3 P# m9 l) s
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 g% Y6 J  a8 o# E' W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, y* a- _# k% l  @  Q& q: x7 N- E0 Y' c% e
    CSR = 0x0000;( R. X! R5 J" r# R% Y
    INTC_INTMUX1 = 0x3d;. o3 B, w% m: L. P1 s
    ISTP = (unsigned int)vectors;
$ [5 Z/ y- v" c# }: ]- Z3 ?. z3 e    ICR = 0xFFF0;  9 ?' m& u: f3 P1 }8 f3 M
    IER |= 0x12;  
4 c) J' p! U3 b  k    CSR |= 0x01;  . ^8 l- X1 K7 \: s
0 _8 Z3 p) m7 o8 P( d  u( U
) h' x3 [0 A) N. A

# U4 {, ]0 F! k$ K) Z/ o还有就是两个输入输出函数:
  D* E' h. n! U4 n- Xvoid output_sample(Int32 out_data)
. T6 m/ @! f' J; U{9 v6 p# H5 D: ^$ I( Z. F& h9 ~
  AIC31_data.uint = out_data;  
9 w9 M' Q# _# M/ @2 K; i  MCASP1_XBUF5_32BIT = AIC31_data.uint;% J; H# `" a" h6 D: b
}
! Q5 n9 l7 ^. ~- B6 S9 m2 J3 A7 ~- w- d6 K
Int32 input_sample(void)
7 p* D# ], Q/ \* p* O* Y{  & G$ e: c% J, n, O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! ]& N( s9 {* i1 K6 Q) S! D. v/ k7 I  return (AIC31_data.uint);
  Z1 }; v! [. a}6 n3 O5 ^+ v- P& [9 f( s  h
# }# g. S* R  e) 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-3-22 23:41 , Processed in 0.041538 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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