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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" @- g* w! k4 L
main文件:
) l$ ^  O) _) _! m  M6 j( b* ~interrupt void interrupt4(void)  
3 K8 h7 k5 i* k+ I4 a/ f{
' P/ X& {; Z7 F0 L  Uint32 sample;
! y) e& U2 l8 @' N7 @% k! ?- p) e6 X
5 S( {$ n" \! s$ K  sample = input_sample(); // read L + R samples from ADC1 [5 D# x6 ?& K% g4 ?4 e
  output_sample(sample);   // write L + R samples to DAC
2 R0 y) i& a0 _* ^7 D3 J  return;( G) T4 L$ I3 A, n9 F9 C& v
}& d- q7 D1 F4 `' E/ ?7 s
" A. H& p8 d. T$ c
int main( void ). z3 a5 V6 \" L& u; H
{
% X+ J3 p: O$ t" U! a  ]" O
: p1 ?2 c: U, k- e, y    /* Initialize BSL */7 v, C2 z; b; B2 I# X4 P
    EVMC6747_init( );
/ S8 H  U. o4 a$ z: X        /* Call evmc6747_intr function */
' g1 Q, E( o+ d8 O% l1 Z. s    aic3106_init( );& D9 `; e4 K0 p- N
        while(1);5 j' p  w- f" U
}+ h# h: ~; ~! `; r! j

+ C" e" u) b9 k+ I+ |( I! K7 n1 ~7 W8 U, S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; _& A# h0 z$ g
/* Initialize MCASP1 */% b7 P5 A/ ^' D* m3 U# U
    mcasp = &MCASP_MODULE_1;/ |7 ]& D# Z: x: J& e
    mcasp->regs->GBLCTL  = 0;       // Reset/ p  N6 Z1 n$ h# c4 y2 f; w
    mcasp->regs->RGBLCTL = 0;       // Reset RX
) a- H" H  g. ~    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 Q8 F5 t' `) |- \7 ~1 N: z    mcasp->regs->PWRDEMU = 1;       // Free-running
* S9 y6 G$ f# V- h* i$ g   // configure McASP0 receive registers
* w7 ?% d3 Z+ x# U, C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 u0 Z1 B  k0 A/ [4 O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* G3 z+ }# a$ j) s
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 g/ a7 Z- L* a+ `2 Y5 ^3 h" Y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* y: z+ t% u/ l7 X4 b& l6 g    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 W' V  R0 i, O# X
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ J/ K9 n& y; P' A/ r- O0 ?    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 f: i* p% O& z# b7 \    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 ~9 [. J/ _) c6 P6 ~0 z% Q! p% I9 t  p. Q4 U9 m
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 H9 @% D. D( J7 U% [3 M0 A; x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) C1 o' [, W: U1 e6 d# n6 Z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ l+ ?0 X$ H- N& S( @
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 y" n+ `) f' |7 H; q% p8 ?. s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 }7 O& ~# e. V& @, D" h    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, H/ j4 M. t7 a- T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 \' F8 ]: D! W& j' v
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 z* G+ u( b6 V) q
; _3 Q6 }5 ^" Y. M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. [$ w. M. W+ }1 f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 S; {. t! x; B; Z0 z; f: u0 L
    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 }: C+ o! v& ]4 G% ^) T    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( j7 ^1 h9 G8 k4 [
( s* ~; g+ u! a) `    mcasp->regs->DITCTL     = 0x00000000; // Not used: G4 d  _' r6 }$ I3 g+ i
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 a1 q2 U+ r% [+ U6 U& B* w
    mcasp->regs->AMUTE      = 0x00000000; // Not used
; D/ j. o, c, _0 b# b. H
. [, O# B. E# o; z/* Starting sections of the McASP*/- p; x+ ^) g8 C" z7 z& b. v
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* X( x2 B% ~# w$ l1 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  * }$ j' a# z1 i$ @: J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, i; W/ y8 s2 \/ r3 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! O& j0 l/ G  J& E% @+ }
! j  C+ B. {( o: V; m. {
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ `8 ~3 g, ]  Q) v5 @: J5 h' e' s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ Z1 r1 B, V' a. k! t4 y% `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + }5 V( R8 _3 Y9 w2 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* M. Y4 K$ H4 M2 w4 b
( h4 w* T1 o6 \3 q( y    mcasp->regs->XSTAT = 0x0000ffff;
  s' `1 N7 a. V9 v4 H6 [0 |    mcasp->regs->RSTAT = 0x0000ffff;
1 e) O5 r0 C! h4 t- q, f2 g& [. T/ c% d4 D5 R: K1 I3 m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. ]& E: @. P4 T' ~: F3 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 s1 \6 ?, K* P4 x0 S    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   p2 ]2 p( d! B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 b# p& q) N& x1 H1 b0 @
( ~( @3 P! C8 W' S6 j& K    /* Write a 0, so that no underrun occurs after releasing the state machine */* [7 H, e  C; f5 A/ `
    mcasp->regs->XBUF5 = 0;2 c6 x3 y( R1 z; i# [
    mcasp->regs->RBUF0 = 0;
6 E& @) X  ]3 X  _
  {& V  T4 u; ^: a% p1 w    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " I% H1 B( y& u0 e& t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 c8 h2 k" i7 d9 H; E2 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- [6 }+ E9 Z6 R0 e/ I4 J: s' `- K5 f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 y8 @7 a' }2 e8 x* D
3 b. ^" S. U5 S
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, U* M* M3 q. I* v1 F6 D3 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 m, i2 S1 j$ v$ J% M! N/ j4 r    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) _* i0 f! m, i1 J0 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 |0 z5 L# m& F6 Z! H  ?! I: s
& {9 o/ a% g( z; O, e& }
    CSR = 0x0000;
6 k/ {% S% b' y. n1 X0 M  d) N    INTC_INTMUX1 = 0x3d;
- E9 r" V  i& Y  e  Z* l2 V& i1 L5 G    ISTP = (unsigned int)vectors;
0 f! ?% \8 O' y    ICR = 0xFFF0;  $ I0 ], V/ g! n! R! d3 \
    IER |= 0x12;  
% G' Y6 w- J1 u3 _3 K3 N    CSR |= 0x01;  
, H! Z1 p: N( o" L9 G- X5 _, g0 ~+ q

1 j- v% Y; F7 j8 U+ y" Q, h% w8 b* I! O! R; h
还有就是两个输入输出函数:
$ f3 l( [6 b5 svoid output_sample(Int32 out_data)2 G' z, [2 v' {2 G3 s
{4 H0 H, h) r3 U. u, ~; y4 \
  AIC31_data.uint = out_data;  # s3 H# C" u  r1 w* z; g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ A  g  i: b' F. d
}
; f8 Q6 k: g+ l5 @: J' `7 q
9 G+ F6 J* w5 PInt32 input_sample(void), I2 I& y, P, Q$ x  b
{  + b# l. V* D/ b) Y* r9 V& H" ~
  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 I4 J& f# y* k2 Q! u. L6 V- G4 ^8 ]
  return (AIC31_data.uint);
4 }. X- n& D6 G+ F) A}4 h8 \9 c! T* M" v8 W
3 ?) r" @' i/ g% r3 m& a
分享到:  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-4-8 19:22 , Processed in 0.041118 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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