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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 J( }0 Y- w/ G' Y0 z" H; b' ]main文件:; w- q, g' e/ d  {) E
interrupt void interrupt4(void)  / T  L5 h$ Y: q/ ^: f
{
8 s! U& n( e9 N7 i( P* \  Uint32 sample;& i5 K% r$ b, P- V
. e2 }+ e( t) J. M( `7 p; P
  sample = input_sample(); // read L + R samples from ADC0 |* P- E- n2 t4 z% O
  output_sample(sample);   // write L + R samples to DAC 3 ^, N3 k, z* B1 E
  return;
5 I( i  B+ k" S$ T7 ~) g; p}" `1 s9 u. d7 t' _4 y) G/ x  ]
8 O3 E' l+ h! O$ Z; Z
int main( void )
. o/ w& s3 O# F{- y7 y7 |) b1 h2 o7 j
1 l+ `  Y) G$ r, V+ M
    /* Initialize BSL */
( f6 O8 I1 K4 D# ^    EVMC6747_init( );
6 q4 x+ B5 ^$ `. i1 Q        /* Call evmc6747_intr function */# F# {9 {  |1 M1 O/ V4 S" z
    aic3106_init( );( K/ m' ^, b3 n% z% N% ^; _
        while(1);! ]" @# O, l0 Z0 j
}% `8 e4 Q/ z" y2 w

5 M1 b/ p7 ]! o' p; k% R
' b( e2 W. w2 Q! s# Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; Q4 m2 @5 g; y" y' k
/* Initialize MCASP1 */
6 d! B5 Y& G) }# M" v    mcasp = &MCASP_MODULE_1;
7 F# w9 d2 B) T    mcasp->regs->GBLCTL  = 0;       // Reset" m: J# f$ R/ _' u' g3 U
    mcasp->regs->RGBLCTL = 0;       // Reset RX
  o9 {, [" ~  u0 A, ~6 Y9 Z( d! {& E    mcasp->regs->XGBLCTL = 0;       // Reset TX
4 y4 [9 D" A) b5 L0 q    mcasp->regs->PWRDEMU = 1;       // Free-running
7 U  D+ X9 f, `" [1 l0 b" `; K8 x   // configure McASP0 receive registers7 ~' e' I, |/ R( h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* T" u5 a: G% c/ {, j% w    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 ]! c, r' M2 a+ }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& A4 C% c. C& U) _. G6 C) N
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ k- @5 [3 Z+ _- M    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. f  T& r5 {/ Y0 \& {4 E0 Q% k' D    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 z5 @! {" q' F0 O% ^0 i6 p. m5 U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& h, X: T) h, i! d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 A5 M! E! ]% ~1 M' B$ A6 Z$ [$ u
$ l9 D& `) w3 G% j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 t8 g* c5 [5 q! P# x" @: p
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 x5 D: |, J- ?% Y' _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. A8 U% F: `( v; l$ W: ?
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- Z* O( a" v$ p" B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 g: y6 Z1 S$ O& O3 k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 g) Z" I5 P" o7 i: b    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 R" x! ]" O6 s" e, ?6 I    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% M% I, v0 @- L' z9 T1 q4 j7 p7 ^3 @: j3 w( \( E. c
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 o( l- d% _; H$ w/ k0 ^2 H; s% T
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. L0 \% k8 P; }1 E. g    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 h, x5 i6 _0 }2 i1 f) c; r$ O( l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; A, i. k7 \( F7 l  F, t
; ^% T1 g* z( `0 j1 q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
& k- _5 _2 P! W4 f    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# ?0 k  u' v! L) ]9 [# @1 [( _    mcasp->regs->AMUTE      = 0x00000000; // Not used: h5 Y8 @. V4 t5 Y

: z0 Y- k5 L/ I; b5 e; H- y/* Starting sections of the McASP*/
, ^" ^  d  j1 a" S; V6 K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 p# h$ }% O7 k$ O1 p) j& G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ [; A  C4 B. h& [4 |    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; x) T! \5 [, k+ S) j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; U- E3 `, l# j. m; y9 V+ d( J* @3 K2 g) N( m2 k& Z& w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 w  u! H$ b$ Q; h8 a) x: j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  \+ {! t4 o8 v7 D3 U/ [4 G
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # f% S8 a, E9 P: [' f: I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! j; a) [  H* K1 H8 e
+ I) q* ~! w2 r% d    mcasp->regs->XSTAT = 0x0000ffff; 6 u! c0 F/ p+ ?0 T/ f
    mcasp->regs->RSTAT = 0x0000ffff;
: ?" _8 T- p, J. M
7 k7 q: i$ U) X) f/ m/ x3 f5 w" q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 k1 D1 G0 g5 _' j( A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 @" A% ^3 w) @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 C7 x( J% P- o3 l5 b+ f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# i# Z$ K2 ~2 j  x$ w
5 ^8 K: ]: r8 c& N
    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 l6 `) i: b( K9 ~/ i    mcasp->regs->XBUF5 = 0;
. v# i% b5 ^% X) {4 }/ N    mcasp->regs->RBUF0 = 0;3 }/ y5 |+ H, F0 f7 C/ |! l) t

7 o' v' d1 \8 D+ [/ |! e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 l) R- t5 `) L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ L6 [5 b+ n& X# I% _8 R6 l
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 a. n0 |& l( b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 k' p) W  _! w, N
" d  l% L4 a' v    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 k7 \& Q# B/ r2 L# O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, g# }# m: S1 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; a- t) i0 M3 J0 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# N# B3 Z, G+ h' [: G3 R) J
( Q' j- @. j3 T! ^    CSR = 0x0000;. w+ p: d2 ]7 A- B: n. u* |1 }
    INTC_INTMUX1 = 0x3d;
, V8 u2 I1 e+ H3 |    ISTP = (unsigned int)vectors;- v: E& b# q9 t9 ]& m3 @
    ICR = 0xFFF0;  
% }  O6 y! D: T. R7 D( r    IER |= 0x12;  9 q) L$ U( l0 ^8 b2 n  I2 A" y3 V8 N) F$ P
    CSR |= 0x01;  ( v0 a: \9 V5 X: r' L' B% h
+ K" R1 u* D% E3 V& ]
- y8 \' _% e0 K) }  `0 `
0 ]# E2 d8 S% W9 `1 }( a! a& m8 Y# S+ o
还有就是两个输入输出函数:4 o6 R8 T1 r. ~8 n
void output_sample(Int32 out_data)
$ Z4 Q$ x+ _. v" h! p  }" o{/ f+ m  l" c( i8 d) s9 ~6 b- V
  AIC31_data.uint = out_data;  ' q( \# `7 J! P3 A; n2 F
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# O: {+ A8 ^2 o3 T  l1 Q3 J
}/ K+ m( S% C) A0 u5 L. O+ y) d! |
$ E9 f- R8 X& M: p; R: n' O' J
Int32 input_sample(void)0 j. L' g0 G5 |' c' ?4 L# J( W
{  
& D; v7 r1 d* n- Q  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 [- N: \3 w+ K7 b8 l' m, |2 I* b  return (AIC31_data.uint);! u) [7 A$ ~, i  `
}
# P; R$ w* {' Y! w  }% z4 F
! i/ B' L# z; o$ n9 k: c0 g
分享到:  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, 2025-11-15 08:55 , Processed in 0.041140 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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