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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 P  ?0 c9 Y* e0 w7 q3 t
main文件:
$ e. E1 V3 V. ?  O$ ]interrupt void interrupt4(void)  ( n* Y# q8 ~& s8 E+ s, m4 A. i
{1 u3 ^! ?' P' x. F: @- W3 S
  Uint32 sample;
; e6 R, _7 S$ \  }- [4 g2 t8 U% z% J
  sample = input_sample(); // read L + R samples from ADC8 G8 A$ l0 ]- v/ b4 z: e2 ]5 D
  output_sample(sample);   // write L + R samples to DAC ( w- }: Z; p+ ]) ?2 t! m
  return;
( N4 L. m& D* ~8 d" C  O+ O}
1 t8 E+ V: }/ q! z
; M2 _+ e# o" ]- Qint main( void )) `1 H7 \1 H5 s! l( f
{
& r3 s( i% Z" V- D+ s/ c: Z5 u) M
1 {+ s& x( T- M& D. n. N    /* Initialize BSL */
* N6 R1 T' _0 T3 u    EVMC6747_init( );* |( o0 K: ]  V1 _$ o7 p; u& D
        /* Call evmc6747_intr function */
5 O2 o1 `" }( w& u  f& U% u: v. G    aic3106_init( );
7 h$ `+ {( f4 t% A$ ~3 A        while(1);
: k% ~$ n& N3 F) g3 g4 M}6 R( e" D+ {: e; `7 R  Z# I
$ P& P3 [7 y% A' ~( P& e
3 q: a. o) a% _7 s6 k( K+ `$ ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& n2 p" }% v, q8 C, X- m/* Initialize MCASP1 */
: k' d; C/ f3 g    mcasp = &MCASP_MODULE_1;, c" q3 q" d9 p% t8 q
    mcasp->regs->GBLCTL  = 0;       // Reset
+ T, X% t- D! X    mcasp->regs->RGBLCTL = 0;       // Reset RX* y$ k4 L- {6 X+ W& f
    mcasp->regs->XGBLCTL = 0;       // Reset TX/ q& K& Y" k4 r# Z; p6 x
    mcasp->regs->PWRDEMU = 1;       // Free-running
) q, J5 _: W! b   // configure McASP0 receive registers4 C0 N8 K4 P. S! f
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 f* ~, N& X# y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 N3 r3 W6 G$ d! ?+ X' Q; Y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% ?4 B- K* J6 n& T' i9 `; @5 M* S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); |% o  k) `0 R# v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 l/ H/ W. _8 I' e3 u) s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 Z! o1 S6 x' W5 e6 a    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 P5 {4 g, ^  I' Q1 y" g. ~* [
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. H1 B( G5 m" b5 b

( A7 v7 `) T5 j) d* a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ i- k- }$ s9 e* }) s: U
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  n: |" P4 `1 w! }+ B- A7 J8 v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  y1 w9 V3 ~0 k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. v* j# c  Z' k$ v; T! E
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ a' E0 u) P3 @4 z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% f. i+ ^2 p) |+ r+ W: U8 V    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ u8 e& E* T  Z9 l" F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. X3 G5 n% w. b$ Q
; H+ u+ b$ z; @" s
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; T2 p4 ?9 j: f1 u# {    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 r/ O4 l3 t4 M
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 P8 [) `/ @& i; A    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* [; U8 R& F$ w3 }& q$ B
, o9 M9 \+ |6 a/ D    mcasp->regs->DITCTL     = 0x00000000; // Not used
' k8 c+ |. f; U2 |    mcasp->regs->DLBCTL     = 0x00000000; // Not used. P& v* m9 k, m3 l& I1 E$ D
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 R2 f) Y. G" D1 u% n- }! c5 w7 n: }. x" E
/* Starting sections of the McASP*// ^) g/ f. F8 w  }6 Y% R* [4 b: E7 O/ @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 {* I4 K) }, n6 W7 N- R! f1 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 @# V( T4 t! N: d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 |- Q9 B' I8 c3 n' }" Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# E, _2 L' g. o; Y3 z7 R( {2 z) `

* o0 k+ y. v6 e" J    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ @$ ]( ?) o9 A. a! A9 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) I; e& `- I: e& _* {    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% l' {- \% r: C- u# `/ ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; I& m, g. h0 a8 y

3 V1 M6 Q  q4 t9 t) W) d    mcasp->regs->XSTAT = 0x0000ffff;
) ^4 F# Q/ ?* _    mcasp->regs->RSTAT = 0x0000ffff;   a( E: X+ M7 \  Z
3 w  @2 B+ e6 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* s* @6 ?. s- q" O) x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% T# Z4 B! y: t$ I  Z' ^/ K4 f; S
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 c" b: U1 Y( n5 H  |4 w$ A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 `/ m1 c5 [/ Z
% i3 H2 y/ P' G
    /* Write a 0, so that no underrun occurs after releasing the state machine */4 i) o& d) H+ f. E- v& T
    mcasp->regs->XBUF5 = 0;
$ ?' u% M+ {4 Z5 S0 c# b" P9 [+ K    mcasp->regs->RBUF0 = 0;
5 j$ {. u: J3 S# K, U6 ^: g
  H/ |8 t6 E# D( _- ^( J3 E1 d    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " x: v7 Z7 |3 w" m! y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ i) Z' _: N; [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' n; ~  F: q/ |0 I1 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' ~7 [1 T" {  X  D
$ |. Q4 B6 V' I$ U, _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( C% g- O+ ~0 c, }3 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( y) T/ E& t% C! H0 \: T    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 R. s' ^9 y! P: n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( L- E" s; B4 _4 a. Z8 d
7 i( [' [& a, ?5 U. K1 M
    CSR = 0x0000;& W) t+ \9 v& M  {
    INTC_INTMUX1 = 0x3d;+ p  r' K$ ?9 d" w# o5 V/ C
    ISTP = (unsigned int)vectors;( _* k" ^% _, ~* M
    ICR = 0xFFF0;  
8 z6 [- D* E6 R1 h: t, D" a6 j    IER |= 0x12;  * m8 h8 |6 V& _' q
    CSR |= 0x01;  5 _: L! A) E% [) @& T

/ s$ z) B7 G' ~4 e/ V/ ]+ x7 x$ u; _" Z& i: j
5 m. c) O* m  F5 E5 h
还有就是两个输入输出函数:
: W$ f( t* d2 `. q( D$ Avoid output_sample(Int32 out_data)' g) K- k) g" u+ l& P$ U- P* }5 I& j
{
& t2 ]1 j( @8 U& ~3 e! _& E6 ]( ]  AIC31_data.uint = out_data;  ) g- Y- w" s, Y* G  M
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. [& w( h4 N) l5 u9 i: ~' x. _( [}
& M, H. ~) ?2 D% b& P8 U/ p
$ a$ e3 g4 R/ f& Y& V* SInt32 input_sample(void)
$ W& y! _* `6 k! u( o$ `{  
4 j; r  t% B* Z- S8 u# {  AIC31_data.uint = MCASP1_RBUF0_32BIT;: E. o% H/ K4 ]' p
  return (AIC31_data.uint);# n+ W" N  _, s6 I+ A$ k; h! E
}
7 O  B2 o3 B: a$ C, Y1 I4 F. R4 Q8 x7 A8 S* W0 h; L
分享到:  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-14 02:23 , Processed in 0.047622 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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