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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& V8 p4 `# a$ v" x2 f
main文件:
" @$ ]  B5 M' z4 W) f! Jinterrupt void interrupt4(void)  ) e% U% `0 P4 H. f
{! D8 h7 V) R- r, ~( Q1 d! u
  Uint32 sample;- K" w9 g* Q1 z$ Z; I4 V

# s/ G8 H1 {7 O3 T3 a) c  sample = input_sample(); // read L + R samples from ADC
  L# `# Z, m, _- j9 @; i" Q& Y  output_sample(sample);   // write L + R samples to DAC # K/ m) V" @7 K/ F2 g; ^
  return;  O& U: g2 t4 K
}
* @2 x9 e4 G; u# D( {$ n2 V. G
% Q+ D" d( n# V/ {int main( void )
! x6 E) j0 D) M5 F) G3 X  q9 l  i& b{6 S' R9 p6 O- }) Z; c+ C! g, m

8 P# S' Y9 `! i9 D. m! K0 ?    /* Initialize BSL */8 k9 z; g) g; x  b) P' }7 d; f
    EVMC6747_init( );$ h( ^8 [" k5 ~5 V% Q, V. ~2 K
        /* Call evmc6747_intr function */
; G3 O  R' h! U( F8 ?    aic3106_init( );
8 H/ O0 O6 _0 P& u        while(1);% B2 z/ _, o) X# X9 \
}
+ w$ X! X. B5 q5 r
4 V2 }6 C2 j# A. Q- W9 N3 a. p2 G. _! E* G
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 r* K# i9 U* ?2 N2 v/ t+ O/* Initialize MCASP1 */( l; }% I4 u' o3 [$ J9 `
    mcasp = &MCASP_MODULE_1;
  S- y# W1 i& u: @* T2 C2 p    mcasp->regs->GBLCTL  = 0;       // Reset& }# U% }, P5 j# f
    mcasp->regs->RGBLCTL = 0;       // Reset RX- c5 ?* Q! Z; g3 n! ?: d. g. o
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ N* l# A! {3 i8 [    mcasp->regs->PWRDEMU = 1;       // Free-running; h# r3 d5 Q5 i& X4 x! `5 v
   // configure McASP0 receive registers
3 `$ i2 }* |( U  E& _! ~0 I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  h+ A! S/ W  \3 R' N  z. d$ D
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D( P0 O7 D) c. I% E+ I% a- X/ E8 w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ e- Y) T8 ?9 s! s
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); X9 N& z0 f8 B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 P/ j2 ^* u2 h( h% Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ n% A3 c# t  ]( \4 K; v6 Z
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 t0 K  s/ q: _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, q. T! \) T9 U3 _5 F
0 X$ X. D* f/ U( H! F    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  i4 G2 `- A* L7 ^5 ]
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ ~' o' W0 p6 u5 M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! o  y5 v6 P0 z  D, h    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 J! M; Z2 ~+ D0 A' H! r
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 K$ `& }6 p$ Y) p$ |    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 ^% ^4 x# @2 V/ S8 |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- f8 s3 ?; s+ o$ Q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 D: V3 b* F6 I) j+ [, ?- P

4 H  @1 H" E" h8 D8 v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  T: P( o2 |1 D( A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 ]/ a/ t; f% d( Y+ y
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ A6 l. m" t* t9 o( a& R8 E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! u. W; b  I* B

5 T6 l' u5 F% s0 Y% v- z4 E    mcasp->regs->DITCTL     = 0x00000000; // Not used+ n) K! @& X: d* {" S/ [  _$ g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 X" ]; Z/ C+ D6 d    mcasp->regs->AMUTE      = 0x00000000; // Not used$ X- H% i" k4 p6 c! l3 S
; p/ C1 p+ F" g: o
/* Starting sections of the McASP*/. g7 [+ h8 r) [: n( q# i" B. [
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ k, ]( I$ t' W$ C( D% Z. d* Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, \# X" Y6 n. n) G: Z5 l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   A- e4 ?4 Q; C6 b1 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* [5 [/ p1 m$ ~8 e. c- o
; J' K. c. P) w$ l* {# o: S
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ D5 M6 h; V1 x- K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ a( T! k) i! p: N8 X    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 G4 l( |2 I6 u; i9 ?; H: [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* R. U1 V3 [. C3 N0 W$ q
$ F& k6 D& u) _+ J8 a7 v+ d/ ~, n    mcasp->regs->XSTAT = 0x0000ffff; " H0 T( ^' v* P- {
    mcasp->regs->RSTAT = 0x0000ffff; ( R: U5 ~( w1 [" _3 [2 a/ m

+ k) N$ f$ H  Q; r& k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! @$ C/ ^& P4 g3 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 z- T$ ^* R+ u) b
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! q4 \. Y2 e# [2 _' y( i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" I2 {7 u4 q% Q; _4 `2 z, a) B
4 d3 U$ X& O5 n    /* Write a 0, so that no underrun occurs after releasing the state machine */# Q* d8 [3 Q" M* n5 n
    mcasp->regs->XBUF5 = 0;
  B' r$ T. \& C6 t    mcasp->regs->RBUF0 = 0;
! o, {. C' d# f) L- b& j% G  L, o+ y! B8 Y4 F2 M3 N" A2 z$ {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , i- \( j6 \9 v8 A8 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 ]! h: v  Z2 d7 o, _( [) f% _    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * p0 p, i4 @' u* @& {+ s: h) X$ H7 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& l4 }0 |8 O8 [2 W* @2 C% B  x* m) s$ B  r4 V  o0 P  R
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 N) I% L9 q& d1 D6 M& Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 z: p+ B. e) p3 A  ^0 v. n; a* ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 t0 [: q& S1 T5 z3 Q: O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 [: l, e& `& K7 a% r* ?( |. d/ `
: P4 x% d3 m% ~    CSR = 0x0000;) g; |# J, Y) ?
    INTC_INTMUX1 = 0x3d;
3 Z# F/ D7 b) N8 C0 w    ISTP = (unsigned int)vectors;' X5 ?* {& d( @
    ICR = 0xFFF0;  
6 Z, z/ |1 S+ g    IER |= 0x12;  
/ J6 Q2 ^, G4 S" q( U7 p9 s    CSR |= 0x01;  / C* D4 Y3 [) P9 c
0 Q3 M, A  Q' ?0 K( X- z

- `, z" K- ]: Y( e  D* N/ ^4 e, Y# F6 B
还有就是两个输入输出函数:
9 t" K+ ]; |# t( {- }: f" Q$ [void output_sample(Int32 out_data). E' p7 ]7 a3 y* l2 z2 H2 r
{
8 d* W& W( _  }! A6 Q+ T, V  AIC31_data.uint = out_data;  3 _* _- H; f/ s1 Q* z  d
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* F: {3 c- F% y1 ?6 z8 X
}* c+ F$ j8 p1 c6 R  P. `  s+ ^

2 F7 C. Y; K7 v2 m9 C; ?Int32 input_sample(void)
- L/ G& C3 `- Z' V# ]4 Y& |4 W# c{  8 D$ L8 L' F* M* h( {5 J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;' h) v4 U! F6 V! w8 {7 `6 {
  return (AIC31_data.uint);+ K+ t2 F5 P7 p7 E. L8 h
}
, ?# A# Q) A5 F8 {
' l( q5 L" [5 W4 L5 |2 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, 2026-3-7 21:25 , Processed in 0.043232 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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