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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- M& f) d  H) ?0 Q2 M' amain文件:
% f/ }& n- K, ]# o2 t0 }interrupt void interrupt4(void)  
. e5 {* O; C, C- S3 N8 d. o+ r{; m/ L7 m; y8 V3 V* I$ [
  Uint32 sample;
& j" k1 P, [( U" l' O4 f! u, p* c1 _5 _( z! \
  sample = input_sample(); // read L + R samples from ADC
- o" p2 I( G1 U6 }$ n1 p  output_sample(sample);   // write L + R samples to DAC : ~- ?% J3 x; R0 V" B$ Q- e) ?
  return;+ A* a4 X5 r* @" r0 }1 q
}+ N1 F$ B4 V' i- m: U- M

) Q! @+ F6 i9 H- b, u3 i9 T: u! H" mint main( void )5 @4 q# v  Z0 J8 I
{
8 _: O- T4 Q+ a4 l! i7 C7 S
# G" o# P) o( T9 \$ B4 k    /* Initialize BSL */% G# c8 E' c+ i% j* c6 J% }7 ^4 s
    EVMC6747_init( );. W4 I  Q1 _& g' }! m+ H
        /* Call evmc6747_intr function */
& }+ Z4 G/ `# L    aic3106_init( );/ o8 `. W5 \/ k' s7 U( S2 D0 c
        while(1);+ z& D+ j$ o1 z2 \+ [$ \* i
}
% a0 H  E8 d& c% t1 ^0 S& b4 Y
% T5 M: p( i/ Q5 i# {6 i: q" Q; V1 O) Y6 N# a+ P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 J. s: _4 }0 ^1 j" l7 |, ]! K/* Initialize MCASP1 */' M5 z  I- j4 p- _0 C3 J$ T5 y0 I
    mcasp = &MCASP_MODULE_1;3 J0 J0 m. Z1 e
    mcasp->regs->GBLCTL  = 0;       // Reset
& t  Z9 M' q- t    mcasp->regs->RGBLCTL = 0;       // Reset RX  H" |+ E5 O2 @0 F
    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ V- k7 ?6 `5 n* B& y: Y9 ]5 v    mcasp->regs->PWRDEMU = 1;       // Free-running
% @+ |6 H7 V/ r$ F5 P2 X   // configure McASP0 receive registers1 r1 E; @# Z+ N+ e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' M$ Q  }7 p; A: m8 R# A3 b    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ G% l+ m( h6 F; D6 v8 ]) Q
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- z4 o: Z( {2 z: U6 F0 b4 C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 B0 Q4 n7 X/ Q4 m
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- K& _' E) S# _2 w$ t% x5 Y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  a7 X9 a" H& g5 V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used  I0 u" v4 ~1 u! t- D# w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  W6 \" ]% \& {, \) S. r( I4 l

  B6 O5 ?3 ~, B1 a/ w6 B9 [' {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& D6 @- C2 r6 k% I    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" O8 `/ o+ ?% G7 u. X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* K7 q! \. \7 V- Q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) `0 w# u" T. \0 J' V' z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ a% f8 J5 t. {7 H% L+ [
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 O8 N. l# N3 Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 @' m; B5 J) ~2 N/ P    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 Q( Y8 M$ i+ ^  z: }& L
" V; C" U' r7 f$ u0 }$ L
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 O! E9 E" D% u
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 D# `3 g8 F$ Q# G% _. T    mcasp->regs->PFUNC      = 0;          // All MCASPs9 B+ ]) B" v$ {
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. {/ w, h/ ~) o3 C# s1 h, g9 ]+ H5 q' q6 l* B/ f
    mcasp->regs->DITCTL     = 0x00000000; // Not used* _$ y9 [0 w: C) ~4 y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  l8 T% F, W7 w7 C* L0 j    mcasp->regs->AMUTE      = 0x00000000; // Not used: v1 M: F5 M0 f, v8 z4 F+ U/ }

* y, [& w3 y& O% F# U/* Starting sections of the McASP*/
# x) Z. D7 r" J9 g* ], A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( Y8 H7 z* T& X$ V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' j( S2 l# B8 p    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & ~( b8 \8 w9 b% M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: e, R4 x8 o5 j9 w0 s/ S
$ ^; x0 z7 k0 |% @- n$ Z9 e( u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% e0 I4 V! w; O* r' O# U' C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 V  r3 G& h( |7 f) G    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; I; ~, j+ \" g. n  ~0 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 r  H7 n1 V* T/ k( K
6 |+ h8 P1 g% _/ J) _% I/ g# d
    mcasp->regs->XSTAT = 0x0000ffff;
6 Z4 l9 z2 P& \. t    mcasp->regs->RSTAT = 0x0000ffff;
- e6 a0 q  ^" B5 B4 o2 ?% O  g% i/ Q3 A0 S* G; J( o4 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ T3 C2 w2 T. s0 r# ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ p' \. D( q( E/ S' v  d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   m8 H, p' L4 A3 g; q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: P# k3 K5 g4 F. r3 D: ?( G7 ?+ F! T2 L
    /* Write a 0, so that no underrun occurs after releasing the state machine */( i: s) S  E, a# b! k! i
    mcasp->regs->XBUF5 = 0;3 T. `# H  |- z. d% q# v0 c
    mcasp->regs->RBUF0 = 0;: P' M$ V0 ?( t6 e

2 v: t; k5 H2 P5 S" l* i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 j; y1 l* I( e% R1 ~0 B% _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 R' Z1 y+ }& Q  W5 c# s4 W+ C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 r* |6 l* Q1 w! a& _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; V  P8 O  q# Y# j/ G
: P* j# c  v' Z0 p+ Z& _
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) \/ V+ e) Q3 e$ j) k( P5 Z- M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# X8 `8 S6 [5 Q' _# ^% H7 H
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. S) Y  {- u/ E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; [: Z9 s  y1 z8 p8 N

7 O8 G/ V% i' Z6 K, v* [    CSR = 0x0000;
% v% u; d/ c$ V4 G3 Z# S7 K    INTC_INTMUX1 = 0x3d;
+ Q1 K  m- A& v$ v    ISTP = (unsigned int)vectors;
! v4 B  n% {: @    ICR = 0xFFF0;  
+ _9 Y9 V1 s2 S# l$ S( ]6 n    IER |= 0x12;  
* s% U, `. f% V2 n4 F    CSR |= 0x01;  5 T% R% k" O4 D+ E# y% m

/ I1 s9 I) E2 N' V
% B' d3 h) a8 ?; C) I9 D7 d
( ^, Z+ N8 x& C$ f3 t& t5 X* Z: m5 P3 v还有就是两个输入输出函数:/ m) \# F+ N+ X/ C
void output_sample(Int32 out_data)
0 b: i" B8 t: m{. q& c: E$ k) _0 u, _
  AIC31_data.uint = out_data;  : b- h, @. ^, }/ N3 `
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ f. D8 J  D5 r4 J}. [. s. C, p7 j9 G$ H5 `: j/ g
# N9 a. y% \$ ^# N
Int32 input_sample(void)5 h. b% e4 Q# d7 b; ^
{  ( A# |) j% Q+ u0 Y) B
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 [) u9 F+ {6 P9 K5 ?% T; k  return (AIC31_data.uint);
" O* o9 D8 {% }* M}
' |3 n0 u2 H) K* U5 F2 X" M" e
分享到:  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-2-7 23:00 , Processed in 0.041824 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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