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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. D$ y# j6 f! N0 v
main文件:& u1 u0 y, p: f
interrupt void interrupt4(void)  
* A$ Z, P- N- m: a. u# W{
+ U2 T; g$ f9 s  Uint32 sample;
  ~& P8 j8 i% h! u- [! k8 p
+ v9 [2 O! W  M  sample = input_sample(); // read L + R samples from ADC+ \& V( j9 k+ J$ x3 a! ~6 M" U
  output_sample(sample);   // write L + R samples to DAC
8 N; z+ F- }/ _' K0 {) U8 }  return;
3 Q! y3 x' U" X  G& i}& Q+ o- c! M0 b

  O, t: m; ~/ g* b" q6 Mint main( void )
: N. O9 d$ L; e# q. q4 A1 ^# k{
) Z' k$ p+ O/ H& ~( t. o4 N0 @8 }2 C. n' ~6 r" l7 ^" J
    /* Initialize BSL */
) A. W- q# V% M7 A" P4 Q/ T) ~# |    EVMC6747_init( );
  o- O3 R6 f' K5 `2 H' Y" B        /* Call evmc6747_intr function */) o5 z2 q1 Y. |) G
    aic3106_init( );7 S$ A8 I6 w; K6 q
        while(1);/ w2 M* a# V" e9 z: O' u
}( I, L- @6 B0 b# j
' ]6 K$ {7 |9 m. w" U

% h( u: F; K0 F% p2 U$ @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  v% U5 p6 u  u( e0 c
/* Initialize MCASP1 */
! A# Y5 P2 S: q; d, S. ]: U: ]: z& ~$ I    mcasp = &MCASP_MODULE_1;
+ @" e4 [$ @/ z3 u+ k6 F" B) u, z    mcasp->regs->GBLCTL  = 0;       // Reset
, o: N* v1 Z$ m9 ~  A" d9 |    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 y3 n; z! K% ?1 n    mcasp->regs->XGBLCTL = 0;       // Reset TX
  G4 t- }  B+ G: S- M- W    mcasp->regs->PWRDEMU = 1;       // Free-running/ V( ]" z7 p! z" l/ O3 x4 ~
   // configure McASP0 receive registers
& h3 V- y( E$ o4 R# l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ f4 d9 o6 U7 e3 O0 Z% |    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 V, o$ W7 p- f& O( G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% O0 f8 g/ w- y9 x: K- u6 [" c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), o) C! i% y! ?) z- k
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! V; D/ _1 x+ Z. z# D/ U% V( V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! p: M2 A9 X" c* V# l& F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used% S- {  _) ]2 L. q) a, m7 }0 `
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. c8 L: B- i( K: m3 ]1 J* H: y0 Z: w+ Y0 U; X' }0 U) `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 I+ o8 ~  Z9 b* J# U; R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ G3 t6 k- f! H6 A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( u9 f/ K9 f. z0 w! e$ p    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, o1 F8 R; z" D3 j9 c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! C# u2 ]- a. d, P  E& r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 u9 A- x/ K5 A9 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 |9 Y' H& {3 j: ~2 ^6 G    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' V% v$ h$ H1 l" r  C1 v5 G. J" G) _; a2 g6 I' T
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 U  V+ R9 G. u8 E  }- c3 G0 j" Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% r7 a0 P8 ~# O( h9 `
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 N" H  P" F: _0 S3 B# O4 z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. V; V) i' P! H- k/ U
% c8 A5 U/ z  O. q    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 {4 o* N7 L+ h    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  u- q* o6 K  v6 S4 h    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 A' r" |/ l2 S$ [7 q# N
( W6 R5 r3 p$ i& v' A+ C/* Starting sections of the McASP*/
& }& ^! X7 P8 }  l( D) I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! c' D. T5 s' u2 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 Z) }* f* B4 I! F    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! g1 v. U, W% @5 y$ s; v" v2 V9 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- F* s9 ]; n2 E! V* X$ |9 O8 E/ S% `0 k# q5 O( z/ o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 m3 s$ n( y, n. ^4 g5 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  _: {& @9 Q4 n, R1 L/ c( m! u* g
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 {' h/ Q2 O) Q$ g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( H, p2 _2 {, L, \* ~

# }; E0 @& L- }7 V' U* ?. I* @% G8 {    mcasp->regs->XSTAT = 0x0000ffff; / q2 B) R+ A" g3 m
    mcasp->regs->RSTAT = 0x0000ffff; ! X" R% t& Z, m# k$ F+ |: D, \, V( s

  o- K+ o9 N& X- |9 S    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 }8 E4 R# X5 z5 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 W7 E8 l+ ]" M9 X' h$ S    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" H- d5 w+ c8 F% z1 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ P* }3 T- m4 I1 Y
# g$ N  t: l+ p9 l0 Y. m
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 S* @& N0 ~: Z' Y$ P" c
    mcasp->regs->XBUF5 = 0;/ T# L1 b! e- |. ^/ \; I
    mcasp->regs->RBUF0 = 0;
! {  r/ Y4 j: N6 \# w) ]4 c( N
6 U' F* G- o' N) \1 {5 _6 Y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : J( |' v( S4 t$ ]+ b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 i6 Q5 y1 K* p$ O- y" J5 J4 n. l0 D# e    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! B! U0 P% S3 H5 ~/ G8 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 ~4 C' Z) v& ?
' j. [* O7 n) r9 V8 D
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) h# T# S8 j6 O& y4 H, d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& a7 r" E8 X( W' w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 n3 k0 D1 |' Q* a2 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* [! o: O- i, H

/ b* v1 [, `# p  h2 |4 x    CSR = 0x0000;
9 A: s/ [$ X0 P. }% n    INTC_INTMUX1 = 0x3d;
+ p( F. V* H. L( O& L* P    ISTP = (unsigned int)vectors;. h# A6 |" f# {: l9 e: |
    ICR = 0xFFF0;  
. R& X. w& @3 {; q    IER |= 0x12;  4 I- Q' d5 k+ f- y
    CSR |= 0x01;  ) m, @' |+ |$ o8 D5 t$ p4 D& u( G9 S
( [  D0 W* z9 H* w1 m: w. I7 Q4 k

! y, l5 Q6 d" p+ O0 Q; H
  }: r" R: V6 k$ L还有就是两个输入输出函数:4 M" ]1 x1 T1 N3 g7 E
void output_sample(Int32 out_data)
6 {: b5 @1 i9 T$ j$ ~. \/ E{
0 X5 c7 \  W$ T8 L7 K, R% ?8 F  AIC31_data.uint = out_data;  
/ v5 P8 \1 p( k' H- E8 |1 [  MCASP1_XBUF5_32BIT = AIC31_data.uint;  u$ |7 ?: |4 C, Z$ c1 B
}' N5 R  C& I! }% }: M% K

2 K6 ~" X7 Q6 YInt32 input_sample(void)/ N, J' V/ e4 U2 L& J( }) j
{    ]5 ^$ Z' d+ ~1 k! u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 {, f  P* P/ k) x3 \  return (AIC31_data.uint);
4 e; u0 F1 U# K' r: d/ K3 c! h}
! ^: x; A+ h, O# A! m6 c
8 e# a; [" z6 I! \* E% 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-16 15:21 , Processed in 0.037928 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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