C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 D' X! ~: c( Z; p0 Pmain文件:3 H. |( |- k3 U# n0 ]
interrupt void interrupt4(void)  
) F& M9 w3 Y3 Z5 T! u{2 O0 K  A+ }% _
  Uint32 sample;  G( i& g" @" C/ T  _
1 V( S' f! H, i6 p% f
  sample = input_sample(); // read L + R samples from ADC
! \9 v& ]2 k  @3 N; h  output_sample(sample);   // write L + R samples to DAC ; _" |: a9 k2 c$ ]- U$ ]  b
  return;- X* h& t' q2 u2 v# S( Y
}: L' t; \$ q- C  q, t
& N0 y# w" }8 ~; ~7 Z
int main( void )
- `5 Y7 ]" k( o; l{* A) g2 e: O0 d: `  m5 P: d
: G7 i4 g6 ~6 R8 L
    /* Initialize BSL */
& e- q: _. \1 h) [    EVMC6747_init( );6 ]# c: t1 d) R
        /* Call evmc6747_intr function */9 d9 C. B; W: s, s6 o
    aic3106_init( );& _; c: t( h) q8 N3 n
        while(1);8 T6 x" f8 V% s' `5 b
}4 r1 f6 G# y1 W2 g4 a

; D0 f4 y$ {1 z6 P$ k
& `$ n: j9 ]( {6 h$ xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. S5 X& W% V8 _5 T- X
/* Initialize MCASP1 */+ t  p6 O6 o* F- w
    mcasp = &MCASP_MODULE_1;; V6 e" u/ a/ F
    mcasp->regs->GBLCTL  = 0;       // Reset* u6 D% c* q- ]4 `+ p" c( u
    mcasp->regs->RGBLCTL = 0;       // Reset RX" Z$ o% r' [/ c+ y9 V( \
    mcasp->regs->XGBLCTL = 0;       // Reset TX' I8 b- D' k0 D
    mcasp->regs->PWRDEMU = 1;       // Free-running/ E9 G8 `& c3 b
   // configure McASP0 receive registers. s, O0 G: j1 \/ E# L% ^  s4 J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. e* d4 ]0 d; I
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 A- J3 k/ `$ v2 H    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* j: T0 }; ~) C" B. p2 `( u+ f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! I! n, t! ?! V! y7 _+ I- X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 d) x( }# R3 T4 h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. y5 @, i- v( v; e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used, t7 T& Y! v  }. ^5 b
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 t: d, V, o0 _$ R. E0 n
7 W- Y7 _4 a  l4 u, P; |( Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 ^) E5 t+ V: W5 n9 f0 ~
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 I% ^! G/ R: O3 ^    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ X7 L) |: L! q3 j
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ ^, F! @  X8 q! x& m
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 w. K, f1 J# z) j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) p4 {2 o3 z  n4 v9 T4 M3 q3 B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& C! I" p- ?' F8 y( U8 {    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" m/ ^" C5 I2 c6 o5 c6 ?
- f9 q1 s7 `- [8 x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 S0 B9 |2 F2 B# o5 C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" s5 p0 y/ x) x' j+ s0 l  h
    mcasp->regs->PFUNC      = 0;          // All MCASPs- m/ e: k8 W# U5 ^
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' J0 q- Y/ Y  z8 ~) `4 j9 L
8 X. G+ F% O1 }& |# D. A7 b. _5 O    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 m: Q( `5 C. x% b' _9 h    mcasp->regs->DLBCTL     = 0x00000000; // Not used# d4 B* W: Y; ]  |9 R; O% t1 ?
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 \5 b* O. x: D6 h: x- U5 a
5 L  s( B6 }, ^* G1 e
/* Starting sections of the McASP*/
3 j( b* H6 B) ?$ t# ?& d7 {/ P    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; J" Q3 o# H$ ~9 X! `5 U$ |: q4 c& A# w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 b" t0 x+ Z9 b4 w' E    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 R; U5 S# W+ ], w2 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# r" f1 _8 Y2 i% g( r

3 p! f0 M7 ^2 ?6 T. x    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " ]2 V4 t, }, f( H- g, ?7 S5 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% L* h( s5 S3 m( b% E5 o; l    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . b6 y9 W/ X6 J4 x- k- N6 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: m) d: f4 b( Q8 ?8 J( s- Z3 s$ C) j. k0 d2 ^
    mcasp->regs->XSTAT = 0x0000ffff; ; W+ n& @( K4 T" R. j! h
    mcasp->regs->RSTAT = 0x0000ffff;
# [% z! |) @& H1 e
* U. L3 t  J( F3 ~& M, x) \    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: U) I( W6 D3 P, h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. A' m: E3 v0 ~( K5 J, h
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 t$ N, i; O% C7 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 C! T: Z# e5 K6 d+ O
% C% h1 J. f! F) {. G    /* Write a 0, so that no underrun occurs after releasing the state machine */8 X2 |8 C* q& v+ |2 D' U4 o) V
    mcasp->regs->XBUF5 = 0;5 u  a+ f, [7 F4 A  n
    mcasp->regs->RBUF0 = 0;
& p- f! ^8 t* L7 g$ {
% \* D  A9 r; p" G$ Y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* O" a3 X0 R* Q) c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: E1 r7 M& W6 {6 a, A8 U: ]5 C' l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 Z  Y- J, w8 D5 p2 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- }% k7 `* }# n+ g# D
) B# z; ?! H' p" B* o1 [$ X7 @* X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " s- n% O8 m" w3 ?& L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ q5 N/ f7 I' w    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 ^' h  r% C. h* l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 C' L2 O# N& z# i& T
! a1 f7 y( D2 g4 K    CSR = 0x0000;
% D/ R0 d* B: P; Z    INTC_INTMUX1 = 0x3d;8 S, `# \$ V5 k& w
    ISTP = (unsigned int)vectors;
4 K; }  @0 J0 v, L7 d    ICR = 0xFFF0;  
( P; ^# B# B: g3 k7 v1 a    IER |= 0x12;  
0 d" r2 H: I# w! Z" N8 J    CSR |= 0x01;  & F' B% G1 y7 N$ Z/ q
+ o" N' e1 x8 d# B6 S) z8 H! j
( d3 m, ^( b9 C* A

5 O$ r5 |% ]7 O; Z- s还有就是两个输入输出函数:% A  t+ p7 V: W( R5 i+ h" ]
void output_sample(Int32 out_data)
8 k$ w- M8 W0 g$ K{% @' @. F2 G2 f1 P- Y3 ~$ K
  AIC31_data.uint = out_data;  * j$ R8 t( a: ]- g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ i) S# D" V5 M" V% R3 Y* e& ?}. j! E5 Y$ H. z* b( }1 u

+ }7 F4 c4 H* m5 X8 P' [0 oInt32 input_sample(void)
8 m1 E" `" G5 t  o6 y: [{  
+ w  W  ]( {1 O! q" B7 u  AIC31_data.uint = MCASP1_RBUF0_32BIT;( h9 B7 I0 f7 L
  return (AIC31_data.uint);
8 E" ^* F  d9 b5 b% \4 {}9 G' ~7 P5 E9 d2 A" q$ L" d7 P

( k2 {0 i* v/ N5 n/ 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, 2026-1-26 13:16 , Processed in 0.039997 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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