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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: ~6 e) x% J9 N9 q8 f% {9 v9 ]- H
main文件:
& {2 x) ~1 }% C  Tinterrupt void interrupt4(void)  
& P% K9 N/ e/ E2 F# `{: P- F1 f4 ]+ C" Y& x
  Uint32 sample;
+ D$ m2 f7 |! W& z9 ~$ S. m* ?% n/ q6 s3 X
  sample = input_sample(); // read L + R samples from ADC) `, \, _4 ?5 D4 I/ k
  output_sample(sample);   // write L + R samples to DAC . n  E8 b* v3 ~: A, w3 n3 i
  return;
: ]: |; f9 E& p3 v$ J1 |, O}7 t" R. ]0 l$ n; B- m/ K# S
6 B) _9 n$ p3 Q' ?2 `
int main( void ), }( v4 \9 }2 ~  E$ g2 o  Q
{% B- }: E. g5 A8 K' S4 w7 `" O1 d
# Y$ @+ M+ L8 F" N; p
    /* Initialize BSL */
2 {6 l1 K$ ?9 y5 R    EVMC6747_init( );! Z# c& A+ y# U" Y0 |' @! L  X
        /* Call evmc6747_intr function */
" s. ?1 C# O! M  U2 d) N" W) m! @    aic3106_init( );5 A6 w9 q3 h7 l
        while(1);
4 P: j* q7 l0 P7 |1 n, D, t}! f9 K/ y: p* M7 A+ J! J/ f  ?" K
& t% ]( [2 ^6 U+ o7 i! D6 V
# C' J' D7 f: E& Z2 j; y: c4 a
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# F$ b" P8 z9 ~# O/* Initialize MCASP1 */3 D9 @0 {# i( [% F2 P5 |" u/ \
    mcasp = &MCASP_MODULE_1;) L2 u, |9 @/ N3 e3 m
    mcasp->regs->GBLCTL  = 0;       // Reset
! B0 ^% p! [) ^8 E1 m0 S    mcasp->regs->RGBLCTL = 0;       // Reset RX2 l8 m! d3 K/ r$ {, \8 ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 w' J1 g8 R# `; q    mcasp->regs->PWRDEMU = 1;       // Free-running: j: M, \+ `# }* h$ u  s8 f# ^
   // configure McASP0 receive registers: [5 v- H9 Z9 C: P, M
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 ]. u( Y% U+ A) w    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, j1 ]- V0 X  _( s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- r" f( W. A. d5 h8 ^
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ X7 ^7 r5 H% d5 W( i8 v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- r. c9 t5 S& e% y: e    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 l% h, V5 P6 ^) j2 v9 o4 o# A    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 P. Z/ i+ ~& Q. }4 l4 r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- {4 J: v# i3 [- Y3 W
4 G. n) ]( w2 z' t! N. }    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. X7 ]: v. W5 H, W9 U9 q! N1 B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" d% f/ E: B0 `( `5 u) [    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 u& ^. R& |) ^3 Y9 b- L" u# p" M
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" F: G/ h9 `/ ?4 q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: a) J, B4 [# I* R    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; C# I  V5 K# e
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) Y7 h. v! i5 V3 B8 q# @' }* [1 w
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ O2 B. z) |& m; a, C; e1 f
  r8 B3 m0 }! d& Y3 z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ y# k. z$ ?; _5 x    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 C7 f. P' ~& Y( @
    mcasp->regs->PFUNC      = 0;          // All MCASPs. K! y  s5 D8 d/ Q. O, ~
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" G' o8 d/ @. N' a: T
7 Y' ^6 _7 g9 }/ f! G- d/ m
    mcasp->regs->DITCTL     = 0x00000000; // Not used
! G  C. `: {8 y    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& b# k6 w1 q. e7 O5 a2 m: Y    mcasp->regs->AMUTE      = 0x00000000; // Not used: X- j0 S4 P. K4 D3 a
& J3 _/ _/ {+ }0 A6 R6 L3 L
/* Starting sections of the McASP*/
$ m3 W3 G% P5 H+ i! v2 I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 g8 `2 r/ y  ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) V4 C, b% C; A1 S" m' u
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 U9 j2 G/ v2 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ V$ e' C" z' @( C: b

; a5 x( I& n& o6 ~7 ?" y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 l. E- K7 M' s, m- y1 O; {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 [+ ~! _' M4 L: h" K8 @' ~    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 i2 K1 {; ]6 F% _' Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% d9 \% I* Z# f9 W" G% K
# J; [0 V5 ^; ]0 m. w: [" V9 s0 m    mcasp->regs->XSTAT = 0x0000ffff;
6 b% b. ^6 I2 ?% v    mcasp->regs->RSTAT = 0x0000ffff;
/ @( Y& d7 t9 {- g( O8 m( _. Z4 }! `
) S7 Z" |& W1 d8 J1 o- P    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 ?3 W; C7 ?+ h( u6 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, L5 n+ r6 n5 `/ E* ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , k/ J' c6 S3 \3 J4 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 W! v) Q% W. W/ M$ }3 L! ^5 U! A: ]2 _, N% M" e$ x: w
    /* Write a 0, so that no underrun occurs after releasing the state machine */% x3 p5 `3 ~) K% G
    mcasp->regs->XBUF5 = 0;3 [) G; C" i0 _: I6 U% N! T" Q
    mcasp->regs->RBUF0 = 0;" y6 }6 t# `  d( Q/ o" ^+ L: o8 a

; h, t$ S7 J6 X0 y7 `" a- q1 l    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 t3 y. y  d4 O4 P4 |8 d( y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) H2 ]5 x, Y: a  c, X+ s+ V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' a! R/ ]" K' M: v/ N* q! P0 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 K+ B$ S0 P$ F% x
9 K$ o6 \' \! L9 G    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & c. T5 |! q# d: g1 @9 U) _3 z: @. L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 u5 t& R! z& V& f* {: a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : E2 x- @, H1 Y1 A$ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 W* ]" W5 \: P2 V7 f/ U  _
! `0 A0 b! j; G. G    CSR = 0x0000;; ^0 S2 b1 u0 m1 H7 o$ H
    INTC_INTMUX1 = 0x3d;. i  |) M+ |, }. o' B( P4 O
    ISTP = (unsigned int)vectors;
  r( m7 i3 T# s# Q" G5 f    ICR = 0xFFF0;  9 Y. W" H5 y1 R% q8 Q. A
    IER |= 0x12;  8 m( m  a! Y& A! E
    CSR |= 0x01;  3 h' A6 I6 Z# Y) H4 I
9 G( n9 M1 I7 D( I$ L
! f" m8 q: J& K5 a, K% e" G, W- w
% U& \3 @6 a& c) d& s
还有就是两个输入输出函数:- i9 ^9 D9 C+ r) a8 K
void output_sample(Int32 out_data)0 G+ T+ p8 C3 u, |) }
{3 Z8 T7 }# Y9 q$ v8 G$ T2 n6 l
  AIC31_data.uint = out_data;    S9 f+ P) c% }9 h8 N
  MCASP1_XBUF5_32BIT = AIC31_data.uint;: J2 J* H+ T1 u9 E/ X5 T
}" E" V" H. f  r4 M# Y, G* `& S; S

9 w7 c$ d; B1 S6 Z9 O, jInt32 input_sample(void)
/ Z/ S$ o9 T4 j, {% @- D{  - b$ w2 d1 {7 T4 b' L+ X: u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: d8 X3 e' I, e4 A2 K7 J  return (AIC31_data.uint);
, g' I6 n6 y1 @, Q/ m}% v- m/ v. b$ D! P, n  V& [+ u
9 \: k7 ^+ @; _0 M& X
分享到:  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-13 06:42 , Processed in 0.038247 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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