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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 p# g& s4 E3 s& a& M- _, Gmain文件:+ ?3 T1 E/ c* w+ D+ \; j/ g, _
interrupt void interrupt4(void)  
  O) w8 \/ G/ y2 t5 O{* \7 I- H0 s1 `  A" e  l
  Uint32 sample;
% j- z; R# b/ K3 s
( _' X( x) a) I* U% Q3 x  sample = input_sample(); // read L + R samples from ADC
7 F1 y  F: f, g, C( K3 {  output_sample(sample);   // write L + R samples to DAC / g8 y: `0 E2 Z( b
  return;: G/ _% Y. l% Q" O; r- S
}1 x& ]. @, T; G3 X0 _2 L
: D; ~5 J7 E- G2 n) P1 f& D6 y
int main( void )
( S' s5 \' ^  F" v5 F{! |  {: z" K+ R
' k$ f: X' L- }+ ?" s% V
    /* Initialize BSL */% K. t0 {8 a9 ?' f4 a
    EVMC6747_init( );6 J& \$ S+ C2 ^# b; Z, O, B( Q) }
        /* Call evmc6747_intr function */9 d' K  P% k- ~* N( t8 b
    aic3106_init( );
! Z. O. R/ t& C  I        while(1);+ x7 o# {. b8 o- ~1 O  n0 g0 f
}& D; e" n; c  ^  H

! K/ E) F" X( Z( `) T
1 [, p) M' o$ {7 o6 d. Caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 f! W4 \+ X0 t, }) g5 u+ a$ O; N* G4 P. ~
/* Initialize MCASP1 */% F9 Z# ]- t1 X7 ^6 _3 O
    mcasp = &MCASP_MODULE_1;/ R! D* f: |% y( R
    mcasp->regs->GBLCTL  = 0;       // Reset( f+ N2 B  o5 H: B( ~7 S+ l
    mcasp->regs->RGBLCTL = 0;       // Reset RX# K. H* S: W' E. ?7 w. q
    mcasp->regs->XGBLCTL = 0;       // Reset TX' j2 E8 ^' O/ N& L/ c7 p& |
    mcasp->regs->PWRDEMU = 1;       // Free-running
: ?2 }9 V& o+ l! t0 i   // configure McASP0 receive registers5 z6 n9 r. \& ^% Q3 e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- }5 F+ ^: ?. _' B' W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  J- g' _# G* H0 u5 t
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& `( @( }4 r8 p' C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 Q) n& K, I) m: ~( @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, |5 K9 x" r4 B5 h5 g/ \: L! k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ g2 o8 v1 d( S: w6 P/ ?    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 W, g- m" L% d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# h5 F4 D7 T) m5 W2 ~$ {
8 M& A2 r3 q3 r" F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& I/ r+ |1 q* ~7 J    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 Y' X5 c( t1 e7 ~- N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 p0 `. E. J! }) _. z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 T; @0 R& N0 O( p! X/ I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( d# P, }- p6 O
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! z3 a% x- ^) o5 C
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ l; Z9 k: d  F6 g) T1 k+ y4 |    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' h# j0 p2 C) o( {7 x7 z2 M; U
$ z0 M0 J) ]: H3 r7 O( K* p+ e
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) b" j' a1 g$ ~( X8 }/ r" ]/ @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ F4 f9 p! Q3 t  d0 k0 m7 ^7 ?
    mcasp->regs->PFUNC      = 0;          // All MCASPs/ h1 O; U5 X! o, D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# A' C4 |! S( @
& X6 [" Z7 @; c    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 `: N; V) p! [; M$ k- z    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: U0 X' v8 @- k2 U0 O" j& z7 F    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 S+ e4 k8 ], R( r4 B5 m0 f5 |# Q
  O) A  [3 h; G0 z/* Starting sections of the McASP*/: [) }# E7 r/ ^8 M# }! K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & _: k1 D7 C8 }/ m- F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) U" Z! v$ g% I, P4 V) n: Q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * z. g7 W0 k3 O5 Z/ r8 \/ g& O) [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* o+ c, M& N& Y5 r( f1 x2 E% R
6 y) W8 N& I* B7 r, f4 u
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % l* f. X; u$ Y% g2 N$ A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" o  F- b+ @  p! P5 q. I! p$ {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 q. g, e- T$ W7 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% z) s. W. V1 a- T# v% p1 p# |

  r, U0 ~3 }! f. ^3 S: u4 \    mcasp->regs->XSTAT = 0x0000ffff;
! {2 g" @" m2 U/ N0 b    mcasp->regs->RSTAT = 0x0000ffff; " \8 Y0 e2 ]) D: T; g1 e

+ z3 F* r: _1 q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ j! j. I4 Z) d5 v$ F% Z- i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 y/ c* B& g! _4 J    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % T# |: C7 g9 @8 O) U& q4 h8 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 z" u+ S' S" z% _# ?% c6 W2 ?  T# n9 c: ]; o8 Z  s1 `
    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 v7 d$ a& N* w0 P$ v5 D/ c    mcasp->regs->XBUF5 = 0;
0 X! ]3 d1 P' _* q% t' }    mcasp->regs->RBUF0 = 0;
0 J. V8 ?3 b1 p9 R0 F: [
$ f5 }" |( f: V    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : u! {* h* b/ E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  ]6 y8 Y5 q# M6 O5 y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 Y* q& ?/ O5 r$ m4 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 g4 Q) r; ~$ f: l6 t3 s

1 \3 m) N5 k6 C* j8 D+ d2 Q" _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ ~. a( L. F0 Z: e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 N1 w4 S# E5 R  D; K1 @# y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 E& t9 o' j$ ~& X4 M3 p/ C$ v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" f  A- {: j6 t3 {$ g* }5 e) J3 w# g9 ?, X& j3 v6 N! U0 E
    CSR = 0x0000;: I. |+ A) e$ q$ ]; I% `3 P
    INTC_INTMUX1 = 0x3d;5 T; d9 O: x; O5 a$ b2 R
    ISTP = (unsigned int)vectors;1 G+ ^, Q9 x. t. m/ `: U3 b4 p
    ICR = 0xFFF0;  
: Q) o- \: ?1 M2 d1 W0 s    IER |= 0x12;  , ?) g$ Z- V  v" k- g. X/ J9 J0 u5 U
    CSR |= 0x01;  7 x% L/ S: d* S' g* }+ M, y

+ n1 U  K" _; B
; W! e1 _) N7 ]
" F' A2 ?5 v$ v/ u/ h( K还有就是两个输入输出函数:5 A' b2 O9 M: W
void output_sample(Int32 out_data)
. U/ S" a' P$ C9 [# y. s{6 Q& ]9 Z# X: |
  AIC31_data.uint = out_data;  
  ^8 U" E0 q' N" @9 D! S: I; E+ k$ f  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ F" R/ N* M2 `4 ^9 x}
2 u1 Q+ k& m  |. E( }2 z; R# P  I' W7 e" E+ ]7 w6 b
Int32 input_sample(void)9 q: M$ B" B3 j0 G
{  
5 T! ~* i6 a' N- k( H  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 s0 R0 }0 @! B
  return (AIC31_data.uint);
; }( d; o; K- q( j, }9 u}
  K  M% y4 P* k7 a/ U7 [
( I( h" U8 B0 h: M
分享到:  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-26 23:39 , Processed in 0.038261 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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