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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( x. {3 p3 z% d; R
main文件:: |2 z0 I: I1 K' ?. |) ~
interrupt void interrupt4(void)  
0 j: ^  n6 X' T{- `+ A) a: [1 ~0 C% X
  Uint32 sample;- v: ~% V0 y7 ?: x/ B

' s! D- X; R9 Q- N& [  d  sample = input_sample(); // read L + R samples from ADC
' t3 {$ `* N0 M  output_sample(sample);   // write L + R samples to DAC
3 k; I9 A7 ^3 @6 [  return;$ y; R6 Y- P/ n" M0 X  j  y
}
+ O- c% b6 X& w6 ~
; C0 g# R& _5 X  f/ v. dint main( void ). w5 j$ z, h# z5 ]: \$ l  q% W* y$ X3 N5 Q
{$ V0 d& ^: @9 t. D9 T; a
7 C0 P% ^- l9 Z) w  ~% _
    /* Initialize BSL */
1 m7 ^5 \  K! G- c6 {    EVMC6747_init( );
& F" `" Q& s  P; M; a- H2 E8 c7 V        /* Call evmc6747_intr function */- ^$ u* A8 M' h) [4 j  \
    aic3106_init( );) C/ m" z# v* h6 k" H% ]" D3 N
        while(1);) s# t& ?- t$ }
}
4 r+ I% m1 a* V" b) P. [- \3 l( z2 L; q) u" u5 i
" f7 H1 p2 `/ I# L4 c5 R& G8 ?; P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ T6 ]# |! j! |; r: y$ M/* Initialize MCASP1 */
  Y2 F' l# i- @4 A2 K- i) k4 ]    mcasp = &MCASP_MODULE_1;
% w: ^5 d* e  m0 f% x! y    mcasp->regs->GBLCTL  = 0;       // Reset
# E; ?6 D4 c; H) o    mcasp->regs->RGBLCTL = 0;       // Reset RX
% {. n% E# H8 [9 E4 X" ?    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 ?7 L+ u3 O7 K7 w% ]    mcasp->regs->PWRDEMU = 1;       // Free-running8 \2 ]) ^7 I+ d# P, p) c
   // configure McASP0 receive registers
$ h* n, B0 \, i% r9 _; m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& m0 m4 h- c- g/ Z# l
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' l: E4 Y4 M. Q- x5 q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) `% C: j+ J5 P    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 x' v3 G/ V5 F/ ~; o8 ?
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 o0 b0 u  q/ ^3 E/ k$ ]( e, E: B0 b; F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 B  O% m, D) d
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 J* d% `, n- D* |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 [1 l( d2 m. ~" c
; `3 ^% Z& s$ ^0 Y  _0 F, W  E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* i% F% H. c2 z3 d9 Z# j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. _# H: [5 N6 @2 y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& n0 H' U* M6 \6 c' H, V( K3 V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# k/ L, u  M- l) F3 P8 r6 j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ K- h$ g% H  H7 L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 f4 S! p6 A; Z6 n' b3 J    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ j/ e9 _, b" m
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 P) V$ e. m/ `0 `. U% ?9 N( N' s
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 d3 F8 P9 M' c$ y8 ~    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& p7 V. h- ]/ }7 a. j; R    mcasp->regs->PFUNC      = 0;          // All MCASPs) j6 o& l- V" y. L1 f
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ J! u) j/ W, E% O

1 Q  x$ u- D( z, M% D% ^    mcasp->regs->DITCTL     = 0x00000000; // Not used
) R! X8 Y8 |$ Y4 c. U; A% S    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; K- {3 k) j' K* ~+ q4 ^- s6 }7 M+ C6 P    mcasp->regs->AMUTE      = 0x00000000; // Not used8 w4 n" s8 C& n
( u4 I8 B$ s; }
/* Starting sections of the McASP*/$ u5 V9 a" v, b9 U7 D
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , l1 S0 W& m( ~/ R9 w' g3 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 p: h+ x- q% C- G% e' |- B- a" N$ J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 y9 |0 ~" r& Z  G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: Z1 M4 R8 g, f- n6 e# X8 a1 t' ~
& \/ J& q3 T9 J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) k3 e. v+ U1 g  z. @+ _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  ^6 ~% L' W, Y  Y) U    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ e! P8 J4 C1 `; t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* P% F8 R% d$ k9 H+ _
- [0 T+ j* H& Q  W* t) O( Y, q2 ^) c: D
    mcasp->regs->XSTAT = 0x0000ffff;
! d8 N* g; C! ~$ h% \& \( Y: K    mcasp->regs->RSTAT = 0x0000ffff;
' V/ v& N9 b0 m5 O1 P" m& @* ^- d, g- Q5 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 S$ q# ]3 _5 D7 ~' p4 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" m! B" ^4 v: T3 Z9 D; {& ~2 g" P
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; d2 d5 w" x5 t" J/ N* L3 g1 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; G1 ]5 }0 J2 h! O

8 ?9 [' p  S( m6 l+ R+ O; _" \5 ^    /* Write a 0, so that no underrun occurs after releasing the state machine */
) z( M8 |* c/ v% m1 }6 [' _    mcasp->regs->XBUF5 = 0;2 D8 Y7 A1 L- X
    mcasp->regs->RBUF0 = 0;1 d- }' L/ \! z9 i

" ~. j& P! }0 T; n    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 ?# P- z) g3 d* i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, c# P' @1 G: ~) W! v) h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 `' t! @* V+ _' v8 J$ e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- ?4 j5 w, y% |5 @# W4 m

3 h0 K, Y: z$ `. H3 i; {& \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & v0 q) F1 S1 m! C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 C  D7 c6 ?8 k    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # d8 L$ i1 r3 U( y, Q( V2 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  e7 p* M8 ~( ~  a+ a( N) P& m4 a1 I  q9 C; c- |
    CSR = 0x0000;
6 B9 F1 t( I  C# G: n+ U; w    INTC_INTMUX1 = 0x3d;
2 L, b9 p/ g! Z* r7 s2 b' r    ISTP = (unsigned int)vectors;8 R( g3 i9 y& Z' F
    ICR = 0xFFF0;  ' u2 h- P) {, ^; q5 P$ O( `3 O
    IER |= 0x12;  7 x4 @1 p1 s& o: i
    CSR |= 0x01;  
( ]# _' }% n4 w, j/ x$ k6 z4 u) p7 X, y
9 ~/ z5 M  _; O* [* J& ]' _4 }9 G
! `- p" T8 l& r: z. O0 x
还有就是两个输入输出函数:
- b9 d' I/ u/ b8 g0 J% p* E) rvoid output_sample(Int32 out_data)
/ ?, Z* o3 L( z7 P  }, Y( B) z{( _' }: ]7 z2 I
  AIC31_data.uint = out_data;  
; ^$ h# L& k( ?- F& i% M  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% W% ]- b+ G/ [6 y; I}
) p2 t4 t- H& _3 O$ x2 f) f. U, O, |  N
Int32 input_sample(void)
4 {" J. e/ L9 b4 r* @4 z) x{  
. Z# R: V8 i" z6 p) W  AIC31_data.uint = MCASP1_RBUF0_32BIT;# `" K1 b( l& b% h8 z9 D3 s8 G! w# U
  return (AIC31_data.uint);
/ H2 ^5 J% W( g! w6 z}' b( p+ p4 N/ D3 E6 [) i0 l1 b
& u( n- c, i; r; `4 q  U! `
分享到:  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-31 22:56 , Processed in 0.045553 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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