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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 P/ }5 }6 M" }: O$ omain文件:
( F" e1 }: G/ I5 p6 k; ninterrupt void interrupt4(void)  
7 `+ W3 e8 z1 g, `- N" p) C{
. S2 G& @% ~9 K9 s  Uint32 sample;( F) @6 t7 {2 W
2 ]( i0 \' K6 d4 h
  sample = input_sample(); // read L + R samples from ADC
! L4 f$ P- n4 ~  output_sample(sample);   // write L + R samples to DAC
8 W3 h- y, E- W% S  return;& d: \: p' x5 P3 u
}
8 \0 P: A8 h9 k# T& L2 }; L/ ?% L% L9 G! a
int main( void )
' V2 Q, U. C% }. ~0 a+ S{2 E5 Y3 g6 z& ]8 w

; s" z6 f! p3 v# S    /* Initialize BSL */# v( J& u% K* G
    EVMC6747_init( );
7 {, z# Q; H) V, M# K/ \5 o        /* Call evmc6747_intr function */
, K- L5 ?0 l& n" e( j# ^    aic3106_init( );
) X. e0 f" u1 u: F" k        while(1);5 E* M/ d" j1 V. a2 ]8 b1 G; y
}7 M: @! a9 e8 L: g* _; o: u
0 n# z2 p2 l  d4 }8 |( T5 ?

- [% \9 S+ X9 V. }4 A0 w% Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 e7 `( V* E; O; B0 R
/* Initialize MCASP1 */
. ~1 D7 J! q, M7 z0 V" k    mcasp = &MCASP_MODULE_1;7 q. s- a- T4 e3 S# |( @+ M/ d. U
    mcasp->regs->GBLCTL  = 0;       // Reset- h' W' L) h, j+ Z
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% z$ @& Z3 ~8 m. g$ q. L/ ~2 l1 m    mcasp->regs->XGBLCTL = 0;       // Reset TX! q5 R) l8 q* ~7 e( P
    mcasp->regs->PWRDEMU = 1;       // Free-running
( k: I6 c- I. P7 H/ t. t   // configure McASP0 receive registers
( M% B0 O) R- k# ]& a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ b  k" r2 E3 C0 u# e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: U4 O! y" j# F' s% q  d
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 I* O+ s4 P2 i, \. R
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 G! i) m' x, t8 i3 M7 w
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' p, k" k5 s" D7 n$ B6 X
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- z; S3 n9 z, N1 C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! s$ v' z6 x7 x7 {$ U0 d
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& o# U# D" x: s' v6 P& y4 n$ q: i0 u  K0 G
" x7 x$ a+ g7 z/ K( x. Q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" V, P0 I/ q# N5 l/ U
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" A; E8 Y% J6 _+ Y4 r+ M  B
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) `1 T: }4 T8 K1 x- {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: |# P: W  }5 p6 p2 U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 O$ J$ v6 F% W/ l" \
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 L$ F' E8 l3 d& U8 b5 z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 U1 `/ V$ F, d" c  C/ [! s: j- K8 A3 O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; Z  V/ m  B2 A& {! F3 E
, Y; Z& {8 C* r6 t- U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 H2 c7 q* l; g2 P& T0 |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. k: r0 o- k0 B- G+ k+ s& n& ~% ]
    mcasp->regs->PFUNC      = 0;          // All MCASPs' z4 i; F1 ^- }$ d. A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 M3 ]2 p4 h% e, z% j, G  a

5 J* _* Y4 \/ k0 z; h1 H    mcasp->regs->DITCTL     = 0x00000000; // Not used- E# q3 e# k6 ~/ d$ S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 o  a8 r8 F+ x% d" y. d' ?# v! X; I    mcasp->regs->AMUTE      = 0x00000000; // Not used
! T# v9 r9 o+ f% i7 S5 b1 h
; G# I! B9 P2 D5 T1 U7 ~/* Starting sections of the McASP*/
) L2 x2 L) W/ J5 ~/ x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 t5 R" \/ @- E1 t! O  j! P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 K& C2 l7 k' m2 A# J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + l' J  C8 a. j! R2 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; R; U; @$ G: k3 a: N! V% q( C# X5 C* t
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 f" }9 i% V, d4 G& I; L8 j9 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# H9 k5 {% b6 I8 \' @( K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # {' J, N+ t2 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% i! P- c# @5 Q! ]2 W7 N) F& L9 F
    mcasp->regs->XSTAT = 0x0000ffff;
9 t8 z% v3 {7 e0 ]- |; Q    mcasp->regs->RSTAT = 0x0000ffff;
" ^+ G% ~- n+ D5 K, k  e, r& Z& u9 \$ q7 u4 R$ f0 c. }( [' g
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- S. k" Y$ n- K& i$ j" |- e* B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" Y5 J; G) ?4 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 t$ p/ C- G& y& l! x* f' q. J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 Z+ _* \% p/ \8 I) Q

+ |% C# J4 o3 P, W# f9 f    /* Write a 0, so that no underrun occurs after releasing the state machine */
" L1 T7 J4 j8 M1 z- p    mcasp->regs->XBUF5 = 0;
" W) Q9 p+ y8 o9 p    mcasp->regs->RBUF0 = 0;
2 w( k; D6 ]+ A7 |: d! ^
6 a" t( c8 ]! L1 ^$ z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( T( j5 U. z3 Z) J% T" K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* w. x( t4 q2 c' ^) w: ]* Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* u! U" F4 q4 m* Z8 Y& F, d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 K% N. W5 m, ^5 \4 y

# I* d) m, m8 j8 D    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) ~- p/ x1 c( @. r8 c( p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 }0 j$ l% k$ h* k4 Q. b- f& z! T
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 }4 u+ v6 k7 H5 d. o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ X5 S: T! k# q$ ^& l& ?

: S+ I# _( I* M" [( g$ D    CSR = 0x0000;
" C. |( B" S1 B" a    INTC_INTMUX1 = 0x3d;
  R9 i) F1 p# K8 t5 J2 V8 W    ISTP = (unsigned int)vectors;
* L5 F1 M# r4 V1 D    ICR = 0xFFF0;  
$ a. a$ n3 y& A! x8 g, q- l2 ?8 Q- `    IER |= 0x12;  
: E( E- f- G( ^8 R) n# \! Z    CSR |= 0x01;  
2 Q% b6 N. z! z7 i2 x7 |
+ m) K& ~( Q# e
2 e+ P5 g' z  }+ y* f1 L0 O
' h$ |/ C* {2 s4 ?7 j还有就是两个输入输出函数:* h1 ~7 i2 B# M1 l; w
void output_sample(Int32 out_data)
% E+ c1 n& [7 F. }) B* m+ |7 X{
. `8 k; {0 o( `* F9 R  Q/ [  AIC31_data.uint = out_data;  & i% x3 h9 t/ ^1 f  J+ F
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) A* s! f: m  ^  X+ t}
( T7 I9 @+ t( ^1 `2 I  J
/ Q" ?3 {4 j( g. ~9 L1 ?Int32 input_sample(void)
0 s. n) R. E2 u3 }( U{  
! m; v9 w9 M. g: ?& }  k  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ f# s( M8 Z3 i* b
  return (AIC31_data.uint);, w5 l% g% q% c' {* i; j
}
* o( ?2 s- L5 N+ W+ I) ~& z1 X3 Z  I7 h; u3 ?9 d) 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, 2025-11-29 22:10 , Processed in 0.045008 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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