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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  a+ J, k' \: |
main文件:
! ^( K' }3 x4 @8 s; h) Ainterrupt void interrupt4(void)  
' S: |( [7 e, M  s/ ~! N% _{; C! B+ E- [+ K( c9 q6 X, `
  Uint32 sample;" z5 Q0 F' E. N, y) J
- l- M/ f1 H! M) X# x( M+ \. ~6 l
  sample = input_sample(); // read L + R samples from ADC
$ S3 c/ H4 |8 H6 |; Z4 }  output_sample(sample);   // write L + R samples to DAC
+ _: \0 a. Q. L& Q  return;
0 v# \! e* ^8 w$ x}
6 V' n) Y1 W( {
) }& V+ O7 q# B! ~) K; Sint main( void )
. W  Y% j- K2 }7 d; W{
1 a2 w+ s0 i' j) L% h( F6 z+ J4 V7 f( `* x! D& @, s, [* D) j( ?5 g
    /* Initialize BSL */
6 y8 b$ N1 O0 b( r3 z% L9 E& j! \  v    EVMC6747_init( );) f) Z9 A1 D( Z9 e
        /* Call evmc6747_intr function */2 _2 i& i6 U5 v3 g2 [/ O
    aic3106_init( );$ a: x2 Y5 O+ I" e2 B) f+ _
        while(1);
6 w) P/ G9 i; k4 O, Y}
" V! j( Q" e* ^# ~: w8 i6 _0 H) P6 U

2 E; j; J& D' }6 M9 o) haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 ]+ t- _; ?. `2 J( c
/* Initialize MCASP1 */
4 r9 ]# h7 i0 `" [# ~    mcasp = &MCASP_MODULE_1;
8 E7 G9 u' C9 s; b$ Y* v, e  D6 F    mcasp->regs->GBLCTL  = 0;       // Reset
; a: F8 z" V; i( t6 ~    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ R2 |2 b3 Z# J/ u' T( J* Q    mcasp->regs->XGBLCTL = 0;       // Reset TX
! Q" \: q) h; X0 a    mcasp->regs->PWRDEMU = 1;       // Free-running
2 S  w8 Y! L! j% S   // configure McASP0 receive registers
' c' ?' x* p" Q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* G" z# \$ X6 f
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 x$ y* x* b( ?$ `  S" c3 L# j: y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 l9 l3 {9 V* N8 {3 c# N5 Y6 T7 V
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# o1 k) e& G* _5 f  q. L1 j
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, ^4 M' `" ?, d$ o& a  l* Z; A    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, D  t  u1 o3 N/ v* ~4 {; J8 z    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- d' m6 @) x( X: h6 p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( m! h) i" P, e7 N; l

4 {" i7 P, o; \) y* e# q0 I    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 O% @3 Z3 l4 f- G8 K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 n7 D0 _2 W5 d, B% p+ P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ M$ I) T7 u1 h" C8 [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ ^: T. }, \' g, ?    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. v2 _4 p! w. Z$ a+ s! {" I) f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 g) H, M& c7 ]4 b: d5 F% k$ K1 h
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* X$ q' }$ v4 G( {. |    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* k- R9 ~% k" A8 S
& A; ]$ w$ n) @' e: [. J5 f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 [- {4 G! j8 Y( u# ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* S; v* u! T! r/ X
    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 O" k3 M( H3 i1 t+ B! `1 t  w    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 A/ @5 l9 M3 z, f
+ }, \+ l0 t, i" f% Y: o
    mcasp->regs->DITCTL     = 0x00000000; // Not used# k7 C8 m8 {( n9 ]
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, g3 ]; R4 D8 k9 \  w3 P
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 M! n+ l; d' x! y$ c
8 q, c/ u% b+ r, P4 S, k
/* Starting sections of the McASP*/& A+ t! }+ z* h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ ?. G& [- \" n) T- o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
; e! h, d3 R! t( M6 n8 D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : O( R. H9 G. p' u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 j& W+ C5 t& r# E  e0 U4 n
; r5 H7 S4 Y6 {( N( S1 l' }. S    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   I6 h4 h( n  J  j  j* D; M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" I  S4 n1 m- v; U/ k. y' e# [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 ]! u1 C+ K, ^- y1 R* ^( O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ {7 F; M8 i7 l8 ?' m

+ V; a# @, Z# t: e3 I5 P/ [    mcasp->regs->XSTAT = 0x0000ffff;   O3 e# I3 J- r' u, m# [- V$ }
    mcasp->regs->RSTAT = 0x0000ffff;
! Y* L- N0 C- X/ c0 U( R3 j7 z) y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ o8 d; B% m& _) b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- |, w1 x$ V  ?. D+ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 Z) l- F+ [2 R. [  S/ x* o7 u. B1 |( g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: f+ j% _# }2 B3 M$ O+ c$ \" b% o8 |$ {2 y! A
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 g+ a  r. `8 A    mcasp->regs->XBUF5 = 0;
. I, Q3 J5 G1 K1 _; C1 f3 ^% i    mcasp->regs->RBUF0 = 0;
3 r  B9 |8 f, m+ i: r* }
# K1 c- f' m, }0 k) l- O* q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* b# S3 }3 l3 \$ Q0 ~% r% C+ N. V' ~" x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& v! A, b1 c; L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # X. p1 O9 B2 e. j3 I$ G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. h8 ^: h2 x, I- D9 _7 A
0 E$ ?; L8 d6 z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 ]7 J/ W( Y: W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* F5 R: a; m4 s% i
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 a7 @0 X* Z, X+ u4 Y: N" F2 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 s- ]2 c. q, \! E

. }% U+ y; M  P( r5 S/ A    CSR = 0x0000;
- l# O$ w0 [" I; C    INTC_INTMUX1 = 0x3d;# B, I' q" m6 t
    ISTP = (unsigned int)vectors;
5 x) M# u( `2 h: a) q5 s: g' e    ICR = 0xFFF0;  
. R8 Z: [5 j" {- h& R) o8 c    IER |= 0x12;  
( ~: H  ?0 z2 y& i! C    CSR |= 0x01;  
2 P" ^! H( {$ X0 p* a4 l
" M+ t3 T4 ~" l6 J  G: Q3 b2 q; ^6 K
5 Q, N8 n: X$ x) |% U3 ~6 O, ?  }$ [# ]( o+ g, I
还有就是两个输入输出函数:
5 o" T$ @% N' o4 {- C& Pvoid output_sample(Int32 out_data)$ Q0 o% ]3 |7 O, _1 y2 r" n
{7 E8 a  R6 v) F$ j1 o
  AIC31_data.uint = out_data;  
& s, C" `. }4 u% r* V, [5 i  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ K- l5 f& n1 b9 q3 T6 _$ ]( L
}; x" x, w' R& y: g5 D* c
, ^3 z  k9 u" n4 p9 d: W1 n1 W
Int32 input_sample(void)
* M+ Y7 g5 X0 `5 f0 W  r: [{  $ U4 u9 y/ V( z' Y6 N. M( `* n/ H# U. R
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) d4 G' s" P, t3 y1 k+ T  return (AIC31_data.uint);5 L$ P, y% k4 a. a  J4 W3 @
}8 U) I* U; ^) K

  k. {! K6 ~3 N2 {
分享到:  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-12-7 04:50 , Processed in 0.051440 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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