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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 y! A1 i0 p& |1 {& f
main文件:2 p; i# R) y5 i- A
interrupt void interrupt4(void)  ! l4 z) `1 |- B
{
0 B0 _2 m% M5 T, P) r+ f9 A: B0 R# k0 z  Uint32 sample;+ {0 E0 K7 Q( a( F4 G% t

* \( P, |" }9 Y" I% e$ }, Y1 }  sample = input_sample(); // read L + R samples from ADC+ i+ K4 f" W- E' k+ J
  output_sample(sample);   // write L + R samples to DAC ; N* f* i% B0 @+ R- _9 }/ e
  return;& ~% P7 x! I& E$ f/ n
}- J- i' K" J9 |9 h
# i' ]0 E5 V% p' A9 A, F5 M- R
int main( void )
, E" @6 D6 F# R: ?{: r4 [+ Z. R  M

! x) X7 z! x6 @. p3 i    /* Initialize BSL */  @5 S; |/ H8 M2 L- b  \* {
    EVMC6747_init( );8 d. n, R& {/ U% n
        /* Call evmc6747_intr function */' J1 q5 l+ i4 g1 {4 w
    aic3106_init( );
3 F0 T+ y  ~$ I" ^+ h        while(1);' k3 g1 M8 V9 z0 }7 Z$ u
}
0 k" o( n; T- e4 t" j4 J4 G
- Q* @; T9 t$ Q' ?+ y: z2 u) X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 \! Y! x6 X" s' f8 p0 H3 Z- h( y
/* Initialize MCASP1 */
3 H% M$ X3 d7 [. w1 V. n$ `    mcasp = &MCASP_MODULE_1;: p! z0 b; \+ P2 N- \' J$ X
    mcasp->regs->GBLCTL  = 0;       // Reset5 @0 J1 _/ B3 O0 Y8 Y: g* T7 N, V
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 e& W( S2 r; @. K6 N    mcasp->regs->XGBLCTL = 0;       // Reset TX5 n9 W4 k3 B8 O) a3 v7 F  V
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ _3 j# f) e4 w1 O   // configure McASP0 receive registers
$ ~; K1 \& ]3 }2 m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' [1 `+ i3 _" ^$ R$ k6 L* X& E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ K# J" q! s: R; I) F3 @; o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ n# r+ R0 o' y( b7 G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ h$ Q3 n3 i4 I: p! r) }    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, z3 |/ y# d9 K# B    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& ?5 ^: e6 ?6 @9 Z) c    mcasp->regs->RINTCTL    = 0x00000000; // Not used& X# m- ]2 e5 E& ?. H) J& O
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& ], ]: H. I1 R+ k" q, U
  p* e% h5 \' b& l    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) o0 H. J7 _7 x1 y7 `4 J+ K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: S7 w% ?9 f3 H3 @# i' q+ S  i+ I    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ Z& F  c* Z( V! w* H" \1 u    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; f7 v0 C/ f( u" A! n8 N: L9 N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& o( {! p* Q$ W) N! S    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( ^' ?2 b4 z  T2 h5 b0 Z9 i0 j    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- `( X! j4 g& Q* {. L" a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& O! E; R; M/ \) c* `/ J  T
& R2 \7 J3 b: y8 D0 i+ p8 i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" h3 i7 g; U! K1 E7 b  P    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ @2 U  q  ]; k2 }1 L3 I
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 @9 C$ }9 o, G/ E0 Z% ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* Y0 {: c( d+ y- Y) _4 |' g
1 Z# H. j$ P8 I+ Z! S# A5 K+ m    mcasp->regs->DITCTL     = 0x00000000; // Not used
( r+ ?, ^. \6 y0 ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used, [# C" Z' b( q3 e, p8 s4 J1 b
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& I; ]9 q1 H- W! Q' O/ D
* j/ k( w0 x) q7 _" E/* Starting sections of the McASP*/
' k  z% N' y& Y8 D! ?5 k6 @# n3 X    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : v0 e" x. M% p; u- b8 A  x6 o" _' l: W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# w1 R# X. e+ v; g+ p$ X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. M8 k4 _5 m( F# |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% J5 n. C% ^/ h9 `: C3 B8 b
  ~, [, L  d1 E' L/ w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 K& {5 s# b( U+ r% z, a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 V5 M% R% y8 M; Z( m' X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- U  ]( ?: m' L! E& M( _0 o5 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. W0 x+ x" Z' y3 H, @3 D" V/ k
4 j* d0 H2 I+ {: J  L* ?; i% r    mcasp->regs->XSTAT = 0x0000ffff; 5 z0 E6 t6 v5 U& j8 e" z
    mcasp->regs->RSTAT = 0x0000ffff; 1 H% U+ k* A& X' G7 P; R  @
' j) `+ b4 C$ D
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 W7 E- h+ |4 b( g# N% ]3 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  G8 w% l: }2 i2 v5 K5 W$ X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # {2 _# l& M! y. e; g3 \4 s4 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) N7 w' K; Y7 l  A4 b0 c- \( B4 B
$ i/ Q! l9 F4 b. x0 K6 l    /* Write a 0, so that no underrun occurs after releasing the state machine */* ]9 o& e7 z  p( {7 }( ~
    mcasp->regs->XBUF5 = 0;! n, _! f+ o* f5 }) a  i% y( D
    mcasp->regs->RBUF0 = 0;9 ]9 X) ^; Z! F5 q, z" [) m

; d9 P9 X. s8 S$ c( F    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  m7 P6 [! u8 r0 p, h1 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& W+ s- K( _6 R! i; B# e+ a    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - t4 A0 Q) i/ v& {- _/ ?; w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; P) T& S, I; K$ R1 t- Q3 ?; V# x; q9 v1 E+ d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / G& r$ _9 \- J6 \) l: A: q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- Z0 D$ {- ^3 e: I' m" r
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# q$ P4 c  L! a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( B: \0 P' f$ J6 A' I( m1 d, e
4 w& N$ n6 H! P5 v& u. L- u    CSR = 0x0000;
! R; d7 S. o/ i1 d! {    INTC_INTMUX1 = 0x3d;0 T9 a. \5 V8 _3 E* n
    ISTP = (unsigned int)vectors;# {3 ]9 }0 z1 M' k; E  o$ `
    ICR = 0xFFF0;  . b3 [% j1 |% z! l$ K2 d8 t, `0 B$ \
    IER |= 0x12;  
& i# k4 K7 u) q1 g+ F9 }; V% J9 K    CSR |= 0x01;  
5 h0 j; l5 F/ {$ `8 B/ h3 b" H
  c+ a8 U% u& e7 e- j; T7 G" @
+ r. x. D9 d) R1 B+ Z1 U) q% T* a1 w  h" w. m3 t% G
还有就是两个输入输出函数:
$ v1 n$ e( h0 j6 Svoid output_sample(Int32 out_data)# P$ p9 k/ P8 j% S
{6 V$ O# V$ {5 E, l, y( ~. s
  AIC31_data.uint = out_data;  9 T$ X% l1 l7 \2 l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 r- K' [( H' ?- l}
# J" J: V# z0 \# X' q. |- [& a  G- C# S0 u$ R
Int32 input_sample(void)
* b$ ~" Q4 ?& t# M/ h- M/ u- m{  % i# g( B: A+ V. ~( {& m/ T/ Z* R
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 b6 Q- F* d; J& }- K: v  return (AIC31_data.uint);& X2 e* V) k/ @: T+ u
}
, n- w9 G5 @3 @2 |2 c1 l: ?* F8 x
- Y3 W- M! o2 _% j, a/ Y' ~
分享到:  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-29 00:08 , Processed in 0.037357 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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