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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ u# `& R- l0 smain文件:
" ~/ S% w" n, @& }$ c% ?/ iinterrupt void interrupt4(void)  % S2 d* A0 A2 ~% k$ i, @
{' }9 E1 o% [4 M1 f& g: l
  Uint32 sample;1 Y' X$ Q4 ]8 b+ Y% u* m, K

9 D$ d4 C- C6 ^% V. v  sample = input_sample(); // read L + R samples from ADC4 Q* N' {4 r8 _! u3 h& _
  output_sample(sample);   // write L + R samples to DAC 9 _0 X) v5 R. u* m1 L
  return;
5 l4 a! ]% ~8 v; l- s* j2 l}
* J5 R! C6 _1 t5 F) g9 T3 x/ F8 D' R* V) U% M+ O2 f
int main( void )  z0 W; A. d, \8 W
{
" e1 j8 P: V0 c& x4 x3 z1 R" ^7 p. c  n
    /* Initialize BSL */; Z3 [/ S4 e9 o. J" n
    EVMC6747_init( );
- m7 h& F+ H& e        /* Call evmc6747_intr function */
5 G. {/ G% s, X8 x) q0 _    aic3106_init( );% b3 N2 L, l) m: N" Y
        while(1);
" X: S/ o& {  B/ B3 D}
8 s, C1 a; o" b1 H5 U3 Y! q2 v  J- ~% [% F+ O& {4 T! p- ?
7 w: L' M# `6 K; Q7 N
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( j! Z" d  v) g! O! v
/* Initialize MCASP1 */
' Y- y; X- l, b& g4 g    mcasp = &MCASP_MODULE_1;8 p/ P5 Q& k$ U
    mcasp->regs->GBLCTL  = 0;       // Reset1 u  |$ I+ t" V. o6 D
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 {$ l# X6 I" E0 M2 @    mcasp->regs->XGBLCTL = 0;       // Reset TX: ~  z( t6 ?) Q- A; D
    mcasp->regs->PWRDEMU = 1;       // Free-running
+ Q  _4 N  d+ I  N, Q   // configure McASP0 receive registers
( l4 X+ k; q  u* @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ \' |9 o. P' ~: |/ G3 E: l
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 u- Q+ q3 `; H7 f    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: v+ W1 b  m6 I    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 z- y$ V8 i+ u& s) y  b2 I, K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 g) [$ j" j0 R, b7 }9 |    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 J: f% B  f& C# t- C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- s2 b' S. m( R# n7 Z; q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; ]+ F* H7 b4 s! ^
3 @, t6 O. a$ ?8 ^! @, F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( ]+ }" S- M0 y2 _, g, ^9 w- d    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 r0 m7 V3 F5 C' _" |" O( L
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! G6 z, b# [, M% l" k( e7 ?8 J    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ y9 i( V( Y: ]5 |8 A
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" o% @" `/ t) X0 L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ ?) j% n" N7 l" Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( d: D  Q# n" ^$ b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: ]  |5 P3 S4 _! L% w, L$ g5 h; X, @& @) n3 `; f4 W& v% Y% u2 y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& k" m4 Y0 L5 W. |6 V7 d! O7 Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 e) ?" \. t" w7 G+ C3 y    mcasp->regs->PFUNC      = 0;          // All MCASPs
& c2 _/ @8 n( J2 ?6 m: D    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ Q5 a& M* e7 O& i8 @

) I& L: L4 I1 [8 G4 x    mcasp->regs->DITCTL     = 0x00000000; // Not used7 g% a% [- R; S* j; N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 n- H- G' l8 u) t7 Z2 I) l    mcasp->regs->AMUTE      = 0x00000000; // Not used, N0 S6 y# L: _* X8 e

' G, k! t! h  X& X/* Starting sections of the McASP*/
7 [: Y+ t: [8 P    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 g+ F3 P. U; R. U  V  ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % E- [. ]. c  b/ k% Z  n
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 U- c5 H! H- a8 `7 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' ]+ ^/ E' t* O6 O$ }) r# M6 H: r

3 d# [$ g' {) ~2 z8 j( Y  K    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' l; E7 ?. I6 N6 U7 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 `: h# k4 b3 \    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , u: v" j' _/ n& J. }9 U' T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 N; d' X3 A/ t4 F- s% C  w2 F1 @
    mcasp->regs->XSTAT = 0x0000ffff; 2 H" a4 |# ]' H' V
    mcasp->regs->RSTAT = 0x0000ffff;
  G' s% L$ _/ @, X! X9 a4 `" v
* A; {8 k' ?6 C& a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  g4 h+ Z% P* d) V2 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 c/ t8 y' T2 R& T! e$ Q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 O# r& S9 L5 V+ {. {  x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 C! D% v: P; R7 q% Z- |6 r# V5 v! ^# J2 s
    /* Write a 0, so that no underrun occurs after releasing the state machine */6 }3 g6 V) j2 \2 f5 l2 g
    mcasp->regs->XBUF5 = 0;, b3 Z2 I* Z0 C. i$ E+ D6 l
    mcasp->regs->RBUF0 = 0;
' ]: E3 S- O( A6 e% S3 b3 ~3 W8 ]' A$ |
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + ?) [) U/ U" G- n0 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' T$ A% Y2 n  q# b* u' h& e7 L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 e# v, \& d5 W+ _) I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  \. J+ y/ \+ Z. L( S+ H
% N) I$ l4 B" Z0 f$ |, ?( l: s5 U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 z1 ~, V( l& x1 f. h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: r0 k4 |5 F+ N  C' W( r) R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % R! L! G4 @/ a- Q$ Y+ [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" ~' |4 B, }$ V
$ s: @- I; k2 Z/ H1 p2 F    CSR = 0x0000;2 D2 z, j- g& v5 c6 t
    INTC_INTMUX1 = 0x3d;$ T7 V0 a( o4 z( ?
    ISTP = (unsigned int)vectors;3 b2 |; D! @' y
    ICR = 0xFFF0;  
3 c1 U/ ^" |3 A9 @    IER |= 0x12;  
6 n% T) y+ G- b' @. `    CSR |= 0x01;  
8 z- {2 `" l0 F
$ x# V) e: [2 ]4 ^
9 n4 p: E: D# C" V2 {6 n' D
5 D2 f1 k1 b4 v, Q! w) D7 C: i还有就是两个输入输出函数:
$ e7 E8 [- Q8 Q; c, qvoid output_sample(Int32 out_data)
4 T  |9 d- `4 q6 W4 v{
( s% n9 d* z/ @+ w  l6 a/ d  AIC31_data.uint = out_data;  
7 o, Q" \# [% |" m- N7 @  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 B! A9 J3 ?' P( a
}
& r3 |  P" a, t2 e- m% \$ |$ ]5 e, C
Int32 input_sample(void)
) }8 h* R# _4 b& o  Z3 @8 @{  4 Q# t- Z4 R, k& c( `, {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 y* E5 X7 S9 Y, `0 d$ f; z  return (AIC31_data.uint);
. O5 n' b- j+ Z9 P, k}1 n8 j. L5 x+ F$ [! P2 L$ `

0 h0 y) `4 Y+ F, q! J
分享到:  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-11-30 02:19 , Processed in 0.042268 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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