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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 P' t" P2 _1 B) umain文件:3 d7 k% c, V, i& Q* N' c
interrupt void interrupt4(void)  
1 ^7 S7 }1 m# C. z- j; E- j* [8 C/ a' i{
; x* }+ E7 P7 S% D, J7 _  Uint32 sample;, a, H* e2 s; J# I% C; [4 V  q

, K; i  D; r6 O" e/ y- ^  sample = input_sample(); // read L + R samples from ADC
; j+ _" w: p% t0 O, `. ?  q  output_sample(sample);   // write L + R samples to DAC ( o/ P/ u* a# Q. c
  return;
7 h9 ^3 I3 M+ }7 O6 d' G" J9 t}
3 r; O4 n* i: Y6 F: O
6 s: v) I5 J8 m: Zint main( void )
+ [& [$ h5 e! B0 z# n& w- M1 I{! |, M- F  U" m' ^! _
: M* ~, J, ?0 ]& L7 Z, Y; }
    /* Initialize BSL */
# ^4 E) S4 X" n5 z    EVMC6747_init( );* D6 t6 l7 z' u0 l' `
        /* Call evmc6747_intr function */
7 e4 K+ {* O0 X' c" `# Z, }    aic3106_init( );
% E9 x) N+ N9 V2 Z- `        while(1);
9 }5 Y4 ]( Q- J1 D$ K8 U! Z}
# @- p' f0 I3 _. R0 L% M
! d0 P" {6 d9 w0 R
; M( @* \0 \4 xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* R! b" }0 d; ~6 T% @6 Y' i: B
/* Initialize MCASP1 */3 y# J1 F4 v, [- B, c6 ~
    mcasp = &MCASP_MODULE_1;9 `) [0 Z. i8 B) W- }
    mcasp->regs->GBLCTL  = 0;       // Reset3 q4 a7 g# n& l0 ?6 \/ O, c, r
    mcasp->regs->RGBLCTL = 0;       // Reset RX, R+ R2 \! P' N$ c+ T0 F
    mcasp->regs->XGBLCTL = 0;       // Reset TX1 w, Z" Y  D+ K# P0 z6 |  D
    mcasp->regs->PWRDEMU = 1;       // Free-running
8 b+ c/ a0 b  E0 F7 Y6 j; z" |   // configure McASP0 receive registers+ D0 l% g- u/ t$ o, a# `- o
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 t7 y6 L0 q+ k, ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 ?# K  i1 R7 M3 d
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# n, Q$ T3 F7 |# b8 c
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 Q0 C: |& n7 \- V' M9 O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ c; u6 g6 q5 Y: U+ e: A% B5 ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ k9 I% h/ B7 S1 h0 b    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ |6 ]) d: k1 n2 h
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 d4 s  A8 l: g1 l
# R7 Z! Q$ ~/ l. `+ O( N0 b$ F
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 @% H) Z8 e* l9 R3 I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" k8 a' [3 \1 o- V9 V    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ K5 S, v5 \% B. Z" Z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ D( b4 m$ g$ m( v+ h    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ N' U6 G/ B7 g1 U  Z* n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- ]! w$ g# Y+ u% z( y" R    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 \& f; M; Z: H, O& E2 j' U! ?
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  I, K7 I6 @: t- c0 [: O1 Z3 m" A  i0 U1 a0 \
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 x1 ~$ S+ L% x
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. A7 s. O3 R' d  r9 T1 `% B3 r
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 X& r5 r: a" g+ w6 s    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 t0 _/ V; o  y2 H) ]2 X; @) R9 |( P+ H3 ]' A6 @; b
    mcasp->regs->DITCTL     = 0x00000000; // Not used- F* D% z# j3 L2 B1 T* t) }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( ?4 G# q6 |# G2 ]$ m- c    mcasp->regs->AMUTE      = 0x00000000; // Not used
( y; |# G5 {$ x/ o- c% f( c( d3 g: R( L' O5 Z4 A
/* Starting sections of the McASP*/
* l% E. e' V! q, {- H) B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( X5 R" q5 l* H7 v9 A$ M& _8 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 f& n% [' O3 O; V    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& M- N& P. i" b" u; P% I& L2 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# e* }2 W& L5 P0 a

3 [% D( h. }) s& m7 \. b! E. b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ p- n. O9 c6 J; _( ]. X5 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  E, E8 v  q+ r) a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) V$ O: G0 y2 w/ E3 c4 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 j! e6 w7 s& ?+ I1 g. O

0 g$ V0 N+ p1 O) E+ H6 s9 \. Y( S    mcasp->regs->XSTAT = 0x0000ffff; . [% a% o) _$ d9 o6 R4 J5 t; }0 \
    mcasp->regs->RSTAT = 0x0000ffff;
3 ?5 U) O3 Z4 N" ^7 F" z- Y' I' n7 g: P. ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 ~- `+ Z- [+ j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 x; A% z3 U. B" T6 ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; Y# B, U: N& i( p) D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 C9 P8 j5 b. I, E! B8 L: s1 W& Z8 q0 _1 |$ R! N
    /* Write a 0, so that no underrun occurs after releasing the state machine */
: r+ ^2 e2 H% n$ h! d    mcasp->regs->XBUF5 = 0;
" ]0 b% b" `! ~3 F( e    mcasp->regs->RBUF0 = 0;$ ], f. k, Y7 @! I7 q8 |
# r9 x* _3 b; I( {0 X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; A  |# b# j7 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 \+ H: o3 @4 P' e3 w    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 X( b. `$ g6 D* |' Z& ]: P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# I' {  d, a8 x4 m& g( A: q  C) j& `0 U+ n! W' |2 y7 `, x' {' w
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 Y9 {! F- b! A2 P& _! M/ q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 K' n, l6 B, h$ E: Z! F, |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 a! O5 f3 h' R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- n" l  D8 c. |( n+ u" ]5 o
$ a8 F8 _2 @2 l$ ?$ w, W
    CSR = 0x0000;
. |; Q, R) P' p9 r3 t6 d    INTC_INTMUX1 = 0x3d;
8 H* A, n& J  F$ u! D6 g0 q    ISTP = (unsigned int)vectors;
& I, A2 c- j; O8 I    ICR = 0xFFF0;  2 y4 E1 Q5 P  n. t
    IER |= 0x12;  
' T6 q9 ?( Q- E  m    CSR |= 0x01;  
& y( Y" A7 }3 l0 z
; J$ u! A- t& f2 U  H" \2 F- |! Q  H8 H6 M  X0 H

0 h& b7 `( t. x; p9 G2 V还有就是两个输入输出函数:
* R4 m) C) [# b1 A% Z! _$ u6 Cvoid output_sample(Int32 out_data)
8 H: |  ?3 H. h# K{
/ y4 j) s+ W+ ?. W, n- L  AIC31_data.uint = out_data;  8 ]9 B  b' v# S$ }
  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ s2 N- r3 @4 C2 k: m
}
; b# j- {. R5 d9 |' i0 E
6 P3 t5 [+ T# z) g8 I3 Z, H$ IInt32 input_sample(void)
' ~9 ]" N3 n6 C; }1 n3 m{  " e! |- c, ?/ G& e7 d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;; I6 F5 W. R+ Q$ f4 u! y
  return (AIC31_data.uint);; R/ I) ^$ x# p% G0 O4 C" b
}
; U' o5 A# @: D8 w4 ?, _& U2 i$ ?
分享到:  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-27 22:19 , Processed in 0.041448 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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