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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 G! V2 K& d1 \7 }
main文件:1 W7 S/ J" Q6 X$ {) ~& ]$ r3 `4 a: n
interrupt void interrupt4(void)  , \3 C; C: {3 ^; y1 w7 a
{( y/ e8 `" l: i
  Uint32 sample;
4 E: S/ }+ B6 T2 S3 j2 k$ ~
) T. ^" b- y9 \% r; k; C( m: a" o  sample = input_sample(); // read L + R samples from ADC4 H/ V' y* s, m! p: Y7 ^$ g- Y( L
  output_sample(sample);   // write L + R samples to DAC . l3 l  J  G7 [) T+ g
  return;
6 d( k* p3 k* |* T$ m. k3 M$ U}
3 j1 V& }% V6 s6 a& c
% M) q+ C3 v+ B$ Y2 h% D' |int main( void )' \; ?# B! z$ A
{
; M, M7 c  _6 H0 p- E
/ u/ T  k: c- I( u. Z; n) b. p    /* Initialize BSL */- K, [9 y2 w  @2 l4 y/ e) C
    EVMC6747_init( );# f- ]4 t7 f  @- W
        /* Call evmc6747_intr function */  Z" r0 Y& w3 T& ~4 `1 c5 B8 o
    aic3106_init( );+ r/ h3 h$ K6 ^! O6 p6 n% ]; i9 Q8 j
        while(1);
9 ^' V, b1 s: r% n1 \0 R& d; ~}. I( e/ P! _1 l" G. e
2 H8 Y9 P' O' V. b2 g. w* E$ k2 j

) `) V" [7 y( {- H9 G4 q6 o9 Naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 N5 R0 H) ^3 z" {4 m3 b8 ?# r  v' a/* Initialize MCASP1 */5 v. w! z0 Y3 J7 g; y" S
    mcasp = &MCASP_MODULE_1;
/ J/ O8 M- _3 @5 w    mcasp->regs->GBLCTL  = 0;       // Reset3 _' ?  u% D% c3 R5 ^/ h. `3 V) ?/ ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 Z' E) K1 V4 R* a    mcasp->regs->XGBLCTL = 0;       // Reset TX, A( }7 D4 P3 s7 `4 ^+ X' T1 ^+ G6 m
    mcasp->regs->PWRDEMU = 1;       // Free-running
; R" Y4 a- f1 ^% c   // configure McASP0 receive registers
2 |+ m! B: N# d1 E: S% f2 f- B: w' _    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' B% N% r& m  P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ R8 s1 z1 w6 ]+ p  @3 S
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 ?/ {1 e, P+ X
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 E' ]; w  K2 C& {3 H% P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 D/ q8 j* Q4 B' R4 p2 `/ e1 U
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 J" z& `, c- ]( [( U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 g7 Y: Q5 j' }2 s& [    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* n4 m3 w0 u: u6 G8 [) u$ @+ B2 V) D. K1 _, ]! U
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  N  l+ |9 _$ @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 O& ?. ~3 M$ Q2 k7 F
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; X) k# Y. v8 G, d    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 @& N+ J& Y" ]/ ~    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& N# J2 @: |/ J7 f    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! A6 A6 X8 T  j' i! z, t7 x- Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 c7 N" S. Q+ b  q0 f
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 w$ i3 A; S) X0 r$ X) d% f

: J) Q! D' m1 n9 A. z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: Q! S% ^* m, n1 B, C% w0 k. `  T4 J. \    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) ?0 W+ v. _2 q1 V/ _
    mcasp->regs->PFUNC      = 0;          // All MCASPs; o, U9 b; }/ W* k" C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" q7 d8 E; I/ t. e" v3 ?# J& \* u3 [; X: D% S7 P" L
    mcasp->regs->DITCTL     = 0x00000000; // Not used
: Z) t+ P  [% E    mcasp->regs->DLBCTL     = 0x00000000; // Not used  w* e, w4 g5 G( y' Q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& S; R. `3 S! I6 c
8 V, ?1 v  _/ ~, h/* Starting sections of the McASP*/+ c: o/ R5 O/ k! y: ~: v
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: C; s& n; }& M9 Y' Q1 G- B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- [0 ^& T( d$ n3 {; p3 A; t    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - T" Y6 I5 \1 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 D, H4 Z3 l' {+ p) @
) z) B" A7 v) Y+ T1 O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 l+ t+ V4 m) j4 C( |( X' W3 V3 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 M6 H+ F  Y+ x0 @: m9 b. N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 B4 H* b; ?" z. _7 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ^# a7 x! M$ ]7 O' t! ?  ?( j7 x/ P4 T8 k- S& ^" O# f! R
    mcasp->regs->XSTAT = 0x0000ffff; ' `3 H* W9 p3 L4 A0 y% V
    mcasp->regs->RSTAT = 0x0000ffff; . \) M$ \% \# b* c+ ~2 T6 v0 v

3 o# X4 m& t* _& e" D! e& }    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 C. C6 p' \/ D+ W* h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- ~3 r3 g. q. U" I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " i: E! q9 ]( O& E; j- y3 R7 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 G) q; J% e! Y( i2 `
2 z$ l, b) g, A9 ]4 c! i5 t! c2 [
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* n2 m* Y! T0 g8 A1 t& ?    mcasp->regs->XBUF5 = 0;% F4 u$ {( B7 E. h" T7 \4 F+ Q0 m/ y
    mcasp->regs->RBUF0 = 0;0 I, L) f" e5 A7 c
6 q8 Y. N/ I( ~1 N( e! }# V
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 R$ E$ [: k* l: K9 N6 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 Z% h: b& s2 M6 A  @# m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 x% W. T! W" b8 d( \9 Q# z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 f" M4 U5 [1 z7 F1 }$ C1 i' N, e: |! \) n9 L9 m$ L/ \7 v: X& ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! p9 n: r% A8 |, V! V4 g7 I3 a5 N# r+ O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 g5 l( f- }( E( J/ Z5 Z- m
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 F8 N0 I  ]3 k: a, x# g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ G" j; x2 T2 A- X7 U  T2 a# }' I
. Q0 V% E1 S# E7 I, {7 s; N4 T, A
    CSR = 0x0000;- P4 t" O8 S3 H" N
    INTC_INTMUX1 = 0x3d;& _+ @% W! t6 ^" D* U
    ISTP = (unsigned int)vectors;4 h5 c0 U9 ]5 v8 M1 ]8 ^& |
    ICR = 0xFFF0;  
- U8 p, m, x7 W" z    IER |= 0x12;  ! J$ c5 f& Z1 S1 [7 W
    CSR |= 0x01;  ) s6 x6 E! R  V7 q1 x" O

# T0 s8 v3 p1 }' G6 @
- q0 l8 `: V, M  y0 Q) }# C. N. _: p# k3 _0 z; ]  m' N, z
还有就是两个输入输出函数:9 x, s) D$ A' d' _: z8 m
void output_sample(Int32 out_data)
  I! G7 l0 ^, L+ Q; y6 I{
8 T2 s) a- c8 P: R  AIC31_data.uint = out_data;  8 q, p8 T8 n" H' o8 j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 c- Q0 O5 c4 Y, _5 I
}
) E% Z/ T, S  Z/ d4 F+ t0 `! V8 X* C3 x: N% b8 \
Int32 input_sample(void)9 f) x. s* f& p2 r; U( M" h% j
{  
' y: v( D1 s" E) O  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 V9 f* b) x2 K! P4 w
  return (AIC31_data.uint);9 n9 {- e! |' |
}
1 X  Q% p* C6 V4 X/ M
% h9 L9 k& r+ x* N9 b8 d" k+ D
分享到:  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-3-23 04:31 , Processed in 0.044798 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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