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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; C5 r' ?) a6 ?( R! ^6 I/ Omain文件:
$ [% s/ e: L7 ?( s* `$ i; ~0 vinterrupt void interrupt4(void)  
% L; U7 u6 A) _" V4 D" [{
9 p% e% n: i; ^0 h* b4 A  Uint32 sample;
" ~; T; X% ~0 l0 g9 m1 P: b! r: g/ r9 q  w, M' z" R# t/ V
  sample = input_sample(); // read L + R samples from ADC
! P' p8 C; h) B5 T  output_sample(sample);   // write L + R samples to DAC 4 h; [* g, k: }) e- \) n
  return;5 _; Q( t2 a2 G, c5 \$ ?' l2 }  Z
}
! V8 \! I' D3 r% I* v$ y6 {
+ O7 C3 N5 ^: B# Pint main( void )
$ P& ~1 K& [. U! q/ S{+ K8 M9 ~1 f: s1 Y+ r. p; e

, U6 _0 ]/ N, H    /* Initialize BSL */
9 r! F5 w- B( _* H) h/ M    EVMC6747_init( );
9 U% f4 E3 D4 ]- g        /* Call evmc6747_intr function */* x5 F% S/ n5 {/ B) u$ z( J
    aic3106_init( );! q1 H' }! |* y% T6 v0 f  d
        while(1);
, _  `$ S2 F( v$ @' B4 B4 d3 x}
5 X- z' t6 {2 J
2 E* m& l2 U8 j$ N5 J% S9 x  |$ W, P  ~2 q4 y/ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 S1 Y6 ~* `9 D4 }/* Initialize MCASP1 */
! o: t9 Q& q  D# m6 I    mcasp = &MCASP_MODULE_1;
% W/ {" b  o1 V7 M3 |6 |    mcasp->regs->GBLCTL  = 0;       // Reset  e9 `, u! }" i* W$ J
    mcasp->regs->RGBLCTL = 0;       // Reset RX7 l2 H3 s& F, I3 L) u  l3 e
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ I9 S5 c: g; ]# R. k3 ]6 j
    mcasp->regs->PWRDEMU = 1;       // Free-running* c" ?0 W" h! g
   // configure McASP0 receive registers/ Q5 A( x* q: u- i# y! `7 k
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; o1 Y- U1 d) u( s9 F& @% D) n
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ u2 Q2 P1 D2 y& S0 B1 h    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- C' P, T" t. t  N4 `9 N4 x: a    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). A9 M; N: N: X" o' |: u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 q3 y/ x2 ^! }- X$ i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 d/ M7 B% f  [. N: U5 l$ F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) C# q6 ~$ ~, w' c: G2 J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 L/ C& k* A# M* C8 v% f7 U

- I8 }( s3 x# E2 g. r8 G1 \5 h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- A  [9 _8 B3 ~1 u( a
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" X. j) L3 j' ^4 @# u( N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: L" n; Z4 H0 k5 J/ d) C, s5 I    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. p- P1 J3 [& W7 {8 A, z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
9 J  s2 {$ D+ N- J9 J8 h: t    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 L. b9 ?6 d3 e- q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 w8 x) I7 n, S3 {! P: P    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 |- {, d' f1 K) C
: t+ O+ l$ K2 {! A2 e! l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. D9 z# j! u% \5 y, _5 c# w
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( q# A5 j& S! @) v& p$ Y    mcasp->regs->PFUNC      = 0;          // All MCASPs  P- [1 i4 |! H& R. C: c7 t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: i/ f/ N% B) K6 x, X, Z9 S; o- H$ I7 m* [, B
    mcasp->regs->DITCTL     = 0x00000000; // Not used8 [6 G9 B- q- T/ ?6 F7 T: X$ H
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 a) {' g+ d6 b    mcasp->regs->AMUTE      = 0x00000000; // Not used4 ~  z" T/ j$ Q6 Y& b; p: J5 t
  R( [% U" X; F" a0 i. N' A. S
/* Starting sections of the McASP*/
& {, [. m( G; P. C. y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& O4 z/ L5 U5 H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 G9 ^. Q5 N( |
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % S, u  m0 j+ u$ R  K$ ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 T+ q# A6 d2 i& E' _
; J/ e: @; s% i' g    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 Y. `( ?; {1 |: T4 Y( R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 ~5 q  v9 X/ z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - T' e) }9 c  j( B( w& y# Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! Z8 m4 {3 s/ I( F- K1 L
. t3 S1 R- r* H. y  Z, @    mcasp->regs->XSTAT = 0x0000ffff; ) N' q. W( x5 z7 i8 `9 F
    mcasp->regs->RSTAT = 0x0000ffff; + d2 p6 V) Z3 V, t
, m% X. q+ c& M6 x+ w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: z1 X2 y0 Q  V+ r$ @% r- U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. S& F3 n8 f1 C; i4 z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 \& k' a) \- q7 a" b! B+ p6 b' x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ `- f  ~( s4 {  O% E  z  D6 W

0 J4 C) f  T- l, K    /* Write a 0, so that no underrun occurs after releasing the state machine */
% b, ]% t% v& @    mcasp->regs->XBUF5 = 0;
' R/ ~" |( c6 Y( I- g6 |    mcasp->regs->RBUF0 = 0;7 c0 e: |" |+ f+ L* k9 }

3 Q! I2 N3 w/ A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 V9 Y* u$ y5 f; b* F, U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& k( Z" [& l! N# K/ l/ F/ G; Q, z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( J( M$ X4 `2 n# ]( m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( p4 U1 z, I( R, U4 R8 I+ z7 ^, k
5 r6 d3 q3 c- M2 f+ h- d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % g$ ~9 S( v0 L# d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. F' b" O2 h- h+ O9 b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( F8 f( [+ @& h7 U3 F+ t5 w& m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ r6 X1 M) _6 `
' n5 W# ]9 \9 k: ?
    CSR = 0x0000;% V  [) G# M* _3 X4 a( W0 d
    INTC_INTMUX1 = 0x3d;
- c% A$ X, Q, c6 y* O8 s4 F    ISTP = (unsigned int)vectors;- z5 A( ^+ h$ j3 n. ^$ l; J
    ICR = 0xFFF0;  
+ {, D. t$ W3 H& g- A    IER |= 0x12;  ( |- r0 A8 w2 {4 |2 {! M
    CSR |= 0x01;  9 n$ p. b7 r( }3 U- H! c- W

' o! {' r8 ^) [- U) q! e
0 h4 v, i7 P' H" j4 F1 I  N; O, \! S- ^
还有就是两个输入输出函数:
# L5 M: l$ t6 d0 Y& }void output_sample(Int32 out_data)& x+ _' D- [3 X( Q2 e3 V2 a
{
$ u" \. O5 w! l: b( ^8 f  AIC31_data.uint = out_data;  0 K; I$ P( _) B4 r0 Y9 L* @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; d; F# i% s- D6 `6 y
}
( d0 B: @( {# q( \5 N' H9 w  E% u0 o: O$ k0 Y: @6 g! O3 n
Int32 input_sample(void)
3 X2 b, ^; Q* q4 u{  
+ R# p" z( Z; p/ C  AIC31_data.uint = MCASP1_RBUF0_32BIT;% O3 b4 q" v! c: J) X5 b5 T) i  z: h1 W
  return (AIC31_data.uint);
5 @# ?6 G3 Y) l0 j8 Y}
) I; `4 J  ~3 u3 ?+ N# D7 @$ L8 M. Z
+ ~) x* Y( Q6 _+ h" o: A0 q
分享到:  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-30 18:44 , Processed in 0.042680 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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