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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 t/ b6 P/ Q3 h7 a% s4 C
main文件:/ c9 d- Z) i" L6 g/ d/ a' j" v
interrupt void interrupt4(void)  
7 u1 c# J; `8 s6 C+ V5 K, Q5 ]{
" [! a) T: T2 v; F- I& N  Uint32 sample;8 ?6 V1 q5 |: F) x5 y$ [9 F- q
* ~6 V" G, Z$ ?& W6 E; ?" q( [
  sample = input_sample(); // read L + R samples from ADC
* i) f, g/ v/ `2 E, w+ V  output_sample(sample);   // write L + R samples to DAC
$ w& d8 T# f- ?2 m) F  return;
  |- e8 H- E4 y# U}
* H8 y) G+ Q9 U6 I, W2 F, d7 \! R% B7 S2 J6 k
int main( void )/ p! P8 p: s% L* E  t! W
{% g5 f- @; l3 N. k, h) Q3 l( y: D

1 m, S" ^6 V( ]    /* Initialize BSL */+ j& C& V0 q) u' G& G$ Q! Y
    EVMC6747_init( );' H/ [+ K4 M5 n1 [. O
        /* Call evmc6747_intr function */6 V: d& x- B+ j& |  C# Z+ d
    aic3106_init( );
1 `: ?6 T2 D# n" L        while(1);
' V# \/ X* e. U' B- U2 R' f}
" Q) {4 ]- Z$ [' f
6 N" V% j9 z9 ~
7 F  i* G/ C% g6 \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" Z5 H7 o! \, j* l
/* Initialize MCASP1 */4 E8 g0 T4 D% z5 D! x4 K0 U
    mcasp = &MCASP_MODULE_1;+ [2 ?% g/ _, I+ u. i5 T$ \
    mcasp->regs->GBLCTL  = 0;       // Reset9 @# Q" S7 ?1 X  p8 ~. T( L
    mcasp->regs->RGBLCTL = 0;       // Reset RX6 R4 K8 G7 i2 ~/ t5 T) k' b1 N% E8 R
    mcasp->regs->XGBLCTL = 0;       // Reset TX- z( A: m! f1 n; m) a( G# U
    mcasp->regs->PWRDEMU = 1;       // Free-running, l) x- f* m+ L' z8 @
   // configure McASP0 receive registers
3 E- j5 z" Z, M% x( k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
1 h2 T- U7 |6 E6 I, z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ o: |7 q% o6 Y2 a. i
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 j0 u/ \- K4 C  g+ z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 T4 z0 o' z0 Z% v2 ~- x9 w2 A: ^  X
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 U, D: V. X; i4 ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 g  g' o6 L9 r0 }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 o$ \" J0 z; {) M' j5 P( L) z, B$ W2 n' x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 \) h" S# k7 ?, B+ k# |# \
( S# z# n- }* U6 m( {
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, ^& A) ?, {5 ^( m/ s    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% D0 ~. x7 Q' G* M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: \$ x) \4 o- K, G( W/ f6 E( q! F    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- K6 @5 O1 B. p! f. h    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# A% g5 l2 l: Y1 T: O2 M    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' }; o+ F8 e/ C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 f) ~$ d% b. b: N
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 n+ q3 ^( A5 c& U: W8 n
" Y( |( u! [" P7 {, S) ?% ?) N) c
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 f+ y9 P1 U4 A5 v  w, E    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& A" n( \  s% F2 j
    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 Q5 z2 g8 F3 A( _1 A    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& I) R0 J& C' W  _5 l. n  M

; X' U" N6 s, l2 M3 w3 Z# ?# Z    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ `- |* F7 @% k0 u5 s" c/ K    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 f2 r) _" T# c5 p+ x0 [& b- a
    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 q1 b" \4 W- w- m, X; `
! x; `* t- G* x& |! _/* Starting sections of the McASP*/
/ ?, A6 P0 s( l$ }6 o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - N8 J& H- C4 _6 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " f" p- I! N6 \: s
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 s; o2 h+ r7 Y& j3 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 W& {  {9 l( ]( b1 q+ G

: r) F; y( s5 l2 W( s1 O' Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) \. I  v/ _# z, Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, N  p! _, y6 D: z" [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ T, J2 r7 _+ Z. }/ X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 `/ p+ I; ?1 N1 `# U

8 E/ u. g  v" V, f) ^    mcasp->regs->XSTAT = 0x0000ffff; 4 t7 `1 R- h2 {. h+ b0 L
    mcasp->regs->RSTAT = 0x0000ffff; # b+ z. x0 }7 M  Q* E

2 X' _* F3 K+ o) a! O+ d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 A' m4 E4 E- U. O# G4 g  h6 R  a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: h1 }: o3 t% ?' X- T  a# K# p    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& V# N2 S5 a4 w# F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 R- a$ Y& G1 ?6 J2 h1 \4 Z" N6 m- v) T
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ M9 [- x' C  z6 R8 S( i- B5 m    mcasp->regs->XBUF5 = 0;3 \: o6 X) P! X2 t; J, F
    mcasp->regs->RBUF0 = 0;
) A/ s( [( G+ `1 ^. d- ~
' _& z8 \3 R; s" k) ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' C) z8 v3 x$ @4 S+ D6 S8 _- ?) l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 m( {. P- @6 g" W2 a. l( a3 y$ I
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ h5 l/ W" K3 f. k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( ]2 @& X) u. ?5 {( c- _

: D, r+ g2 j8 i4 |+ K    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; C  k( I9 J" V$ f: u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- z5 h# K% G% N+ [, I$ y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 {$ w2 U4 i2 {( Q! p" s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 `! P& r( X7 C6 A, V; W8 F7 a  ^7 ^

' \" K9 u# B+ R, Q    CSR = 0x0000;8 j9 ^" b  p8 {$ I  ?0 C2 F
    INTC_INTMUX1 = 0x3d;$ W$ M- h# M3 D( e6 N
    ISTP = (unsigned int)vectors;
( g9 y8 E( \8 G3 }5 ]8 r    ICR = 0xFFF0;  / k! Z8 x( r* t0 s2 D: y3 Z3 I
    IER |= 0x12;  # o. j& p. {0 V( ~0 P) T) n3 G) _
    CSR |= 0x01;  ! M( n7 x7 g/ e  U! E

( s2 g' m/ q6 U# Y# ^4 a% K5 X; [
7 v; S3 [, J0 n) m. _" p5 F- {$ K
/ W* J+ f+ j  z0 y2 c还有就是两个输入输出函数:
( Y) h9 W- D% L$ C: A4 Ivoid output_sample(Int32 out_data)
+ _: u( \/ ^" @7 @2 n9 q{
; i3 S5 y4 Z# U7 f; n1 n  AIC31_data.uint = out_data;  9 q' r6 D* _) Y; ], \* g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ d4 D3 G( H2 P, h* j}2 H/ f" h" x" `" v. g6 P# `

  s$ M) [' M% A7 AInt32 input_sample(void)
& \, i3 W5 A& Z) @& ]{  5 }( Q( r, N) E
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 w" g3 H1 s+ D% h, s9 C, X  return (AIC31_data.uint);
+ u6 u3 c# Z7 W0 {+ [, \7 y7 F}
# k  P. v1 W. M; A' ~
0 \, b4 y$ s4 F# _
分享到:  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-11 19:54 , Processed in 0.041714 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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