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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  {6 r- o# O% Y; V+ rmain文件:
9 ?& l. r  Y# F* Z) S$ linterrupt void interrupt4(void)  
3 G; m0 Z: g2 J3 E- }{/ ~' m9 n: r( H; B) Y1 {0 L: b2 c
  Uint32 sample;" ]) U! j3 k" E' v1 ?+ T

3 x/ o" I! o: v' o$ ~+ H! ~6 p  sample = input_sample(); // read L + R samples from ADC
# w$ h& D, O7 m% D3 U  output_sample(sample);   // write L + R samples to DAC   U. U" p$ r/ E9 w; p+ f# n
  return;
1 j1 x/ R8 _. l6 X6 n}$ }6 m/ G' @3 E2 b
7 b! Y' b$ X; G) ]: D4 t: u; f
int main( void )# c) b) ^6 G. h3 z) v# o
{
- ?1 {7 d- @/ y9 e0 G9 m
9 ]; Z3 o- Y6 R    /* Initialize BSL */
( D0 [$ ?( g0 [+ P5 F    EVMC6747_init( );
7 [: l$ q- L% z# {0 ?        /* Call evmc6747_intr function */
" _" t1 \7 d" T( ^6 Y    aic3106_init( );
+ G/ O9 [6 n. K: T& M        while(1);) G( w3 G  F/ @$ x: T
}' n6 B: ]9 Q3 l' q
# p+ L& v$ |2 Q  c; y4 w- ~
9 ~3 `8 J* l- M* G8 x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' M$ d$ N: u) R
/* Initialize MCASP1 */
+ A) Y4 }1 o# |5 j- }% ~% g    mcasp = &MCASP_MODULE_1;
. e0 R4 Z. @& e( M2 g5 |1 p# D    mcasp->regs->GBLCTL  = 0;       // Reset. l# d3 }' f' x% T! o
    mcasp->regs->RGBLCTL = 0;       // Reset RX
. v/ U  b  p! n    mcasp->regs->XGBLCTL = 0;       // Reset TX" ~. D) P& I. F5 ~! v9 ~4 Q, \
    mcasp->regs->PWRDEMU = 1;       // Free-running- m) r. n  E. ?5 ~
   // configure McASP0 receive registers
* d7 P3 R3 g. _2 S# _    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- A0 S% k3 X, w2 V
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  F# w" [# e; O; ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 W! y: O9 s6 Q- r3 U) `. q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# n2 s6 l% }% j" g+ l    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 U" e  M% O$ b3 E% d! T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% Z" Y# k- c! Y) {3 X0 }9 K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ m8 Y  h3 P$ [4 U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# k$ r% z2 h% Z: ?: h3 Z* T

+ Q2 a) T7 r! c; ], ]# S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 ~7 l! y% V' d
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& @5 q. Z, h: s7 [1 K7 E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! @  q9 x& V# w: ]6 U) k! B
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 v/ }: L, ^9 ?7 v) I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 i3 [# J, l0 h6 a0 A
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  A: Y/ Y: v% N" t: a1 U
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 T7 t' a0 |4 g" F/ R( G1 o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& Q8 F: p, _) e, p/ ?# ]
" T; k0 f. }; k7 P( A- l* L3 Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 Q4 w  ~' C/ P9 y5 y5 N: P6 y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* ]8 _6 V2 \3 `6 Y$ @
    mcasp->regs->PFUNC      = 0;          // All MCASPs6 ]0 z( w. K" `( S$ L9 W( C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# O" m* U: F, U  V" k: \7 F; r0 T
    mcasp->regs->DITCTL     = 0x00000000; // Not used
! g5 X) f* q) r1 f* J# G    mcasp->regs->DLBCTL     = 0x00000000; // Not used- J* ^3 q, C- t. A9 B! H
    mcasp->regs->AMUTE      = 0x00000000; // Not used; s* X! |6 n; e

3 o' Y$ Z9 T' W' Z5 n/* Starting sections of the McASP*/
; c* K- A4 z2 K8 ?! X3 k. f    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 H4 F' X: ?4 [9 u) E# |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! W* x: k( v% `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / d6 k. k- r. R; E, r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  ~3 F# }/ U( h

  }( `& ?- v1 g8 c& ?( V/ M& ?    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 ^# @. }# M8 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ q% {" @, l1 S& y% v5 b
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 f0 a$ _! d5 M* |! E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! `& B+ h7 ~! n$ Y; r8 F7 g/ l" J+ g% o) u4 c# g
    mcasp->regs->XSTAT = 0x0000ffff; * q  h, v! y" I; d6 @
    mcasp->regs->RSTAT = 0x0000ffff;
! I8 S! x& E; P9 F! a: Z
9 e& O" W8 `  j  \6 q( U    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 U6 b! g4 ~* u) m  ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- S$ r: T3 \; Z) g! m: e( L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 V- }' y+ C& [4 u4 P) Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' K* {, G+ k4 _- ]% a$ x
5 k  i, K1 I( G( Y" x& t    /* Write a 0, so that no underrun occurs after releasing the state machine */
! @9 O, R- @( W" e7 ]# E- `    mcasp->regs->XBUF5 = 0;' C' j7 m# d# m* ^
    mcasp->regs->RBUF0 = 0;
4 r( ^: |. n" f; G, M; q5 Y" Y- Z. `* B; j% E5 [( U% |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " T& F: J/ D/ l  \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% u5 q: h( C1 i# H
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 c2 E; B& ~) [1 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- O, d! @- R1 n% m3 Q( n% K& E% l, f" e. S
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 L- g6 n( X, u* @/ ]  U! E% L  B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 z5 }6 F$ K5 X$ Q& [* @1 y& v    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& Q) s& r; I; k! U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. M9 B; }3 f2 {4 M
+ c. N" t% o/ W8 @    CSR = 0x0000;" X% {0 K  l" p2 T3 p4 r
    INTC_INTMUX1 = 0x3d;% B( n' [9 r! {5 F8 r
    ISTP = (unsigned int)vectors;
/ k/ H! s3 X) {% A( S: B    ICR = 0xFFF0;  
9 K/ v7 T) k8 w" J/ f    IER |= 0x12;  
; ]# }+ I9 J6 `7 R7 F0 t" e$ B* |  w    CSR |= 0x01;  
) t7 ^$ S2 [- A% g2 I, E4 m
: {( x+ |- {1 k2 N# ], O" n
- y# Q; M2 Z6 S* h  `3 {0 W
; M  n. F( a7 c3 ^! t还有就是两个输入输出函数:
5 s/ T% E% n2 J# V( i: W3 ?  ^void output_sample(Int32 out_data)
6 ]% ?1 V9 j" O! T# j2 V* B{0 e4 @# B' i6 z' I6 L& r
  AIC31_data.uint = out_data;  8 H. d5 R- t% M3 n1 V( r3 ]. r
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( L1 H) \" C- W
}  w! L# j" F) H) G% Q# U$ `; I

2 t* ^* j' i8 I0 |% e9 RInt32 input_sample(void)
/ |! J4 y. F) r$ W2 r" d+ @{  
4 g  f# P, }7 ^: n1 W" e  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, w( D: f  A; \  return (AIC31_data.uint);
; c4 k& ~& Y( b8 G, I8 G$ V6 I}
: |/ U& T, m* r! [! h2 Y: j
" x& t' [' h+ Y4 I3 g" e
分享到:  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, 2024-5-23 11:49 , Processed in 0.041991 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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