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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ w+ c! j1 u$ k6 E" i" t
main文件:" R- ]' Q$ A& _5 J
interrupt void interrupt4(void)  ! d% ]& F, i( U! X( ?
{# p* P# ~- y- I4 l: t
  Uint32 sample;0 L- s# x( s' }! O" X! H
5 Q' ~1 e, o: z3 y
  sample = input_sample(); // read L + R samples from ADC
% b( n, U0 j7 [' A/ M/ \- W  output_sample(sample);   // write L + R samples to DAC
  j) `4 [& H' v( Z  R+ C  return;) u2 ]% D0 T/ D$ O, G" Y4 C
}2 K: S2 ^: K4 B) Q

9 ^' t+ m  v# M: F% gint main( void )
& j5 Y8 ~7 T$ K  J4 \; p{5 J2 C( p  G, R) I6 E7 _

0 m' s$ C% F5 h8 u7 ?  U: G    /* Initialize BSL */7 G" p* P8 K% z* y
    EVMC6747_init( );
8 o4 Q/ u/ A0 O- [4 o+ I) q! v; B1 f; L        /* Call evmc6747_intr function */( W6 f, I; W) q% W$ Z1 _% {- C0 {
    aic3106_init( );1 P7 L: {* ^9 F4 P, `
        while(1);
& R, D. C3 Q* u/ W% ~+ R$ A# s) c}
4 F' l3 {# h+ ~  y  a) d- O+ Z/ R; Z3 v# }+ x0 r
  Q; w- \8 }$ U$ a6 `5 ^2 s8 @$ j5 r
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; b' I% f4 |% h
/* Initialize MCASP1 */
. S4 j0 z  ^: V! N* `9 H) D5 m    mcasp = &MCASP_MODULE_1;# G7 ~; M/ m, Z2 I+ b- W7 M
    mcasp->regs->GBLCTL  = 0;       // Reset
9 |6 |: ]: X: U3 Z    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 Z6 N/ B! }" [    mcasp->regs->XGBLCTL = 0;       // Reset TX1 a% Z" {7 T! I' _
    mcasp->regs->PWRDEMU = 1;       // Free-running6 I% T2 F" M8 r5 t
   // configure McASP0 receive registers
: H0 M; E, `/ I9 C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! q  O& J; S) `' A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 h  n3 j4 {: b6 c1 ^3 O- P& w* e
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 q- |4 b' ~( x% j( Z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# G. H0 ?  O8 K; A  Q6 r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  e8 L# I  e+ {) t3 V- F6 }: ~: w
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 {- x# N" f) V1 A& W/ Z2 s# E
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ J  f6 B( s& a+ d  I6 t    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 T3 d' L( o4 k, ~

& E" f: Y+ j& F2 v& ^2 Q- {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 ?. ^% ~' c  B5 q& z1 o/ T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 K! E1 O. f* L# R2 D: c$ y4 ?4 A3 z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 ]0 N3 J0 F0 h+ H5 L5 `3 |4 S    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  q4 S3 L" G' x/ F' _9 X. z. T% T    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ |) F2 A2 A" R2 d$ j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' [% u: r* ?& i2 A' o4 t  C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 g2 ]) s" w2 w: `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" G4 @8 R6 F- w& o0 u) }% ~8 M0 a5 U# H( f
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 y7 Z: _( k7 h6 \5 J0 q+ f! c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% ]* @9 `* |8 X6 U9 y, ^    mcasp->regs->PFUNC      = 0;          // All MCASPs
# n3 N3 f- d( ^: g$ T    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 e( B$ f- N4 w" Z, x! Y& v
/ }: r) t$ V5 e+ q3 i
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; a+ B) v+ Q! G( h    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. x7 `" m! j  U" U- P3 j( m    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 n. s5 r4 G, j* U2 V# z) a6 p% g$ J+ U3 g) J" Q
/* Starting sections of the McASP*/
1 g2 q% I' J$ C  ]# }    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 v' h) ^/ Z' _+ \% a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # V6 I5 D9 k: {) M0 j
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 i  o1 e! N& l6 m  R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ E& f9 K/ m0 I
: B  `; H& S, w. i6 B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  R" f  _, e$ ?( Y7 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- {1 O. }/ g) M7 h# \; s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ [- i2 Q( W( i2 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# i8 x1 T" H8 m

* C- C4 Q- Z9 u! q! M% c    mcasp->regs->XSTAT = 0x0000ffff;
4 U- t- T- Y  K  ]% q7 @    mcasp->regs->RSTAT = 0x0000ffff;
7 I; @2 a6 ?: r! j3 Y! \! b& |5 |" B3 |
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 |  W! _) j. d; w7 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 O- H/ K0 s  D    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 q4 Y% |6 c) d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( r4 }- f/ a, W2 A: i
7 B; o$ f6 t' n2 S    /* Write a 0, so that no underrun occurs after releasing the state machine */
% d' X' l6 Z$ G; D4 Y    mcasp->regs->XBUF5 = 0;
2 P& n, L: U4 S4 z    mcasp->regs->RBUF0 = 0;, K; m4 I* T* G4 {# N5 F' {% }

& r2 f+ y9 V7 R- `# j" m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 ?& p4 [2 I+ w; W- P. w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: x. G% }" M: b& q: f. D    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # d  N& I8 B1 l9 o8 F4 z: d  K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- s7 H' J4 ?; h& C* j. U. P5 L) I/ F/ `& k. N- T
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* c2 b) t$ f' j+ ]1 H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 ]4 x9 b5 Q( ~% b/ M5 h3 x, L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- H6 ~+ B9 I1 L; ]! h- \* v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# W% `  n6 K# _) u* m4 t, [2 _( |* u5 v* M1 k( q# \
    CSR = 0x0000;
$ a" V7 `' q. m/ E* A# x    INTC_INTMUX1 = 0x3d;& ]& J! E$ g% g1 M9 T3 n
    ISTP = (unsigned int)vectors;  N& E5 F2 [8 q# Y
    ICR = 0xFFF0;  
, H( ]/ }$ \0 p  ?" h" p    IER |= 0x12;  
( f) z7 d, a  S; u    CSR |= 0x01;  - d* @% i7 W* s$ c  L$ }% m
% ^' l0 v8 d+ |1 Y

& f  F' v6 f* L* z& O4 e- E# k3 l! {5 w! d& z7 V
还有就是两个输入输出函数:
) ~1 \' j  m- D+ r$ l4 M0 Yvoid output_sample(Int32 out_data)
) M+ @+ ?3 b' E+ z' H" h{0 G; f0 Y; d# r
  AIC31_data.uint = out_data;  + Q8 N4 j7 X4 C' t/ ]
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 T7 e" y/ W  L/ u
}1 S* w' n* _4 s# j0 p+ Z' j

0 h; R( _6 Q/ I# A6 [Int32 input_sample(void)2 @5 D9 O1 Z( {7 V/ h
{  : n% g! [% D5 }# Z- ~
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: N' P5 O$ s- }2 b. a
  return (AIC31_data.uint);9 A% o& |+ ], [6 ]  U. p3 t# Z
}% |# ^- }6 s5 C) s* t$ h7 Q" q
2 o2 [  j" F% y+ {$ i
分享到:  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-10-14 03:52 , Processed in 0.043038 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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