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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 I: ~) `; o3 `5 m% @% M
main文件:3 T. y  F! H$ o8 E
interrupt void interrupt4(void)  7 X0 g2 |2 m6 U; Y- ^
{$ @) E0 X) R" }$ c
  Uint32 sample;
9 P$ G4 K- _+ D  ~- L3 m
8 M$ o8 }0 |5 w  sample = input_sample(); // read L + R samples from ADC
0 a; k2 d% m$ S* Q! W! A. J  output_sample(sample);   // write L + R samples to DAC
, g* H+ y6 Y9 B& ~4 ?0 l  return;
1 m8 ]# d- k2 Z2 |6 t  U3 D}# i+ N9 L! ]& b1 ~3 `* E

7 D7 Y/ |  }. \: e' Rint main( void )
$ T4 g3 F% o5 ?8 y9 F" s{. k! X' T5 I, j

4 t( ^/ r8 Z) i: p3 f3 B# b/ ~1 _) U    /* Initialize BSL */4 V( O: A* K8 T* l& N
    EVMC6747_init( );
% E9 N3 f# H* @# \: k! f1 y3 r2 b        /* Call evmc6747_intr function *// I1 P% N: A. c* W' f# z) E
    aic3106_init( );
0 b7 [! _: f7 U        while(1);
6 |7 L; h1 p/ h! `}
0 {# S$ I+ g5 K1 r# \/ b
* m. `+ |- N  b8 U3 S# \2 _) [4 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 N8 r1 O! u  K% _
/* Initialize MCASP1 */
& N! h0 O% f$ {8 \/ q' o+ u) }* x    mcasp = &MCASP_MODULE_1;
, d; |7 S6 |( t# E0 ?    mcasp->regs->GBLCTL  = 0;       // Reset
( a6 J: Q9 g  x, K; k0 D9 Y9 j    mcasp->regs->RGBLCTL = 0;       // Reset RX# |! e: E5 O. w7 K' k. K% C
    mcasp->regs->XGBLCTL = 0;       // Reset TX- T+ Q2 P1 h" |" X
    mcasp->regs->PWRDEMU = 1;       // Free-running. P7 `& I. ~$ ~. y
   // configure McASP0 receive registers$ t* c+ z7 Y" J" K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ e" f% E8 Z, U( R" v! B" z- |: N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* z7 D7 }6 S1 C    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 I5 n0 l, r/ {9 Y" @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  s3 ?# e% n6 b+ A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ A1 l  R$ n0 X6 j- q) w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 r' H& V( l8 X    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 |0 U1 s, Z& y; ?. q& a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. z& k; W$ o) W  W* S1 J$ k
% k* z- S0 |) e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ M# p' o) U& h3 R9 k* t2 {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( ]3 m! ?  b1 L% `/ c0 d    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, {9 X7 G/ z6 B' O2 \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' [5 C* t$ r, F& i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, ?" ~; K1 ^- v% O0 L; }# ?6 k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 Z2 R( c1 A, g1 ]9 {
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 M4 k# A! b& J* y! J5 h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) B% Z, u; Y$ n1 o2 `8 P- |9 R1 C; s) B
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. ]+ {! z8 G0 A+ h# A9 m: Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: O- q3 F: |6 V    mcasp->regs->PFUNC      = 0;          // All MCASPs
! t6 o  q, s" d    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* q: [  \) y0 P# z: I2 t
: a: ?. s) H! o$ j/ x
    mcasp->regs->DITCTL     = 0x00000000; // Not used" y4 C2 [$ `  W* t" q; s2 r/ U% v% z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ h- |; P5 d, m' `2 P# ~/ p
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- o4 M% |3 N% {2 X  Z, ?: k) T9 ]. b0 a9 e/ T
/* Starting sections of the McASP*/6 @9 h/ ]0 q2 M. u2 D
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. S( M" U" ~2 a3 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( N# ]7 T# H* H4 R9 b+ ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 G; p8 z# v8 o$ N% ], j5 t" r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. t# B5 C0 V: o* }  w: l6 ?; y
3 E# h* h$ i9 j: J- n; X8 g    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " B8 e1 n+ N# N+ }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: J* e/ w* ]+ n1 B3 d: ]1 h, V    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 D4 y$ }- b) _' j& m0 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, J, p; v. \; r% N  K6 K( Z, @, X% X6 }" P  Z, _
    mcasp->regs->XSTAT = 0x0000ffff;
' k. {( ]( F8 m# b0 W    mcasp->regs->RSTAT = 0x0000ffff; : H4 O, z9 K: J9 b
; k" {' Z/ L5 H' P
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# B, b8 k6 G- l6 ^+ g) I& Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" x6 Z% H# n1 z& v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , g( j, F+ S  _1 D( g+ g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 _; d5 ^3 [, G9 o6 i) }$ q

" C" z6 `" p0 |. [* O3 s    /* Write a 0, so that no underrun occurs after releasing the state machine */8 [1 G" q5 u4 }& P3 N# d  z, R) E4 K$ d
    mcasp->regs->XBUF5 = 0;
0 [" X9 B0 _8 M# N1 z- C6 W    mcasp->regs->RBUF0 = 0;
7 r! i+ n8 t+ ]9 d
3 u3 c5 ~' \6 d4 U" B+ j0 P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 [+ f; _5 [) S, M, b& V3 m8 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- s3 h) o; @6 @; h* s! n+ W- G- B
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' @, g. L, `4 l+ x7 s* w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 {. B. o! F7 G' d6 @

, F4 E3 K3 Y8 ]4 Z: m7 Z! Y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 @" U8 k. n- `0 b* N, u4 r7 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 p5 q; m1 d& ~% X" @! o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 O- h* P) ]+ Z8 c& q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 q* y6 o$ U+ T" D2 G6 {3 H
8 }8 O( N. ]. {0 k% |: X
    CSR = 0x0000;
! N( P. D/ u; a9 j4 n2 }    INTC_INTMUX1 = 0x3d;( O- I& ]2 }; |% A* g6 {2 f" y. e
    ISTP = (unsigned int)vectors;0 w( m' C4 g- L6 _
    ICR = 0xFFF0;  * W- h5 R1 e0 m# t
    IER |= 0x12;  
( F4 Z  v6 y# M8 L    CSR |= 0x01;  
2 W+ w% J; O( S* N" t6 Z* L" D+ w
7 j6 h0 j% k# H% w. H

7 N- W8 Q+ ?# \, J( c# O# q# q( o还有就是两个输入输出函数:9 L* q3 A# A. S$ z, z
void output_sample(Int32 out_data)
* G( F) n6 R4 j3 K+ Z{/ l3 ~) t+ }$ E+ G3 l
  AIC31_data.uint = out_data;  . c! c9 q3 P8 [1 R1 H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 @; a* Q7 Q& \4 z! z9 R
}; Z$ u8 g7 [6 a& v7 [

( C! j& q: g. U9 L' S! TInt32 input_sample(void)
# O5 U5 J) M- w, p" N{  ' P% d& ]5 A' n- S/ Y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, G2 Q$ a; G) T5 }" e2 @  return (AIC31_data.uint);3 B/ b3 d6 l% P, Y* p2 P
}
+ [) n* q' a3 G$ t
4 {" x" \" ^+ G6 ~5 ~# V
分享到:  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 10:22 , Processed in 0.041820 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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