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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 G! c, @) _0 emain文件:$ b* f+ l! U  v% n) _0 b/ }
interrupt void interrupt4(void)  
! i- v5 S' Z' G{& o" U2 Z& @/ k
  Uint32 sample;4 ~1 Q( Q% _1 i3 o, K+ d) O/ r9 v

' p2 t* D9 v9 ?3 d4 w  sample = input_sample(); // read L + R samples from ADC* c8 V: G" O+ o
  output_sample(sample);   // write L + R samples to DAC - c1 P$ k- g6 q  n+ x
  return;
% q) g' o0 ?6 f4 y& ?}* S) T; b: [* [" E; c1 z6 O

: m6 k5 i) j# Z( r  ]* w  v0 B0 }int main( void )" B; P1 u7 a% A6 B7 O; y2 S
{
2 r9 r: a+ m2 m- \0 C
3 S3 J  o  e5 H1 X9 O: C6 l: R) O    /* Initialize BSL */+ v; X4 h* U- F4 w5 ~0 S3 w# K1 U
    EVMC6747_init( );3 Z5 r( u$ }) ~" c. W
        /* Call evmc6747_intr function */0 D$ _  F4 p; Y4 w
    aic3106_init( );
" c. ?+ ~7 i( R3 ^2 o        while(1);
) ]8 k- W& D* ?( z) E& l* `}2 R6 G1 R1 j, F6 D5 h" f

9 I& r0 U5 a9 {
# l; O7 r9 d) e$ c/ ]( C' y+ ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# s3 o/ G) P) ?
/* Initialize MCASP1 */
: ?( C5 Z5 L0 ]- e9 m5 C    mcasp = &MCASP_MODULE_1;
) W4 ]' ^1 G' n& B; N9 C    mcasp->regs->GBLCTL  = 0;       // Reset% T; |5 g( e' z1 i6 U
    mcasp->regs->RGBLCTL = 0;       // Reset RX
# S: u% }( _' }% F# G+ O7 ^    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 H7 ^; N# _" L. o8 r" \/ R    mcasp->regs->PWRDEMU = 1;       // Free-running
! C$ f6 J6 }4 T# n; N& G; m   // configure McASP0 receive registers
; k; E' l/ D: W3 m3 I' i    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) `3 y& Q* E, A" B  \. [% n    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: X; X" Y& E$ b7 G7 d; i/ w) _+ A    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ K! a# S/ N# ?
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: O- y4 c0 o8 w, }6 g0 [5 b    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 O/ [! C4 b+ a' S. P0 a3 Q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& L5 X# R3 G. q* d, C- w    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ p9 _2 v; C* P% t- B5 W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ D$ d" k: ]3 |: }. j% I6 k- f
9 H& f6 F5 B1 ~4 Q  b1 A7 S3 D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# [+ {  W+ s. O2 T7 C+ w; A$ p3 ?
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 b- d5 C2 A/ L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) H& J5 e; l8 C7 w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 _9 x$ S( [! |5 k' n
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- u, ~4 M- @! N; o7 C8 M    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( K6 c9 y- X, }4 x1 [; Q8 H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( t. H( ?& k* G- A    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 L: ~" ~+ e; Z& M8 r) H

, b$ `; [6 O# W    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 W& I" C) j3 {7 S7 t1 K- H    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 G4 _3 `3 t& C% x    mcasp->regs->PFUNC      = 0;          // All MCASPs6 X( J" E: m1 w! y- }1 M/ A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ M" ~( S4 S" \6 ?

+ D7 c0 [7 V, w1 K6 b- p" Y/ A5 c7 j6 P    mcasp->regs->DITCTL     = 0x00000000; // Not used
, j& w8 ?2 w+ J* h    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ a; Y8 c/ ^# B5 E( P+ x/ Q    mcasp->regs->AMUTE      = 0x00000000; // Not used3 q2 }/ b3 o/ K' F( y) [% O! c( t% D

( ?! H+ e( @7 ?9 u/* Starting sections of the McASP*/2 B8 E- z% ~& H% ~
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ ]% u3 z: B% `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 V. {) z) u  K% m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 Z1 P, I% ]$ ^. F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 M) G1 {1 U) [( T/ v
. q: S$ o6 Z" X* L5 `, w8 d" h    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ l! H8 c1 {: N5 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! f, D5 j+ l, d' N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 b7 [/ {( Z$ k/ P' F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* E$ T& B: F, h; ]# b( t/ J/ j" D( v, b& Z8 R3 }
    mcasp->regs->XSTAT = 0x0000ffff; 7 Z9 s! c9 n6 Q4 a& q0 r
    mcasp->regs->RSTAT = 0x0000ffff;
/ e) o" v4 W* K& Y" T* n  w0 v# x: n! L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 V. c) G- _6 L1 N8 f9 b& A$ Q5 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ i! z* n% H7 a& _; d# t0 V    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - u5 }: b4 F5 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 `( o; d7 O# M& m5 m
& v1 b) q/ V. x1 f4 m6 B
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 }( o) ~2 A' y5 U) f    mcasp->regs->XBUF5 = 0;, w. E5 X* S( L0 m. t  Y: m$ ?8 F/ r
    mcasp->regs->RBUF0 = 0;
8 }0 K) b! q' b4 l# H. M' g8 V" v
* e/ T( a1 F8 |+ |5 R    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! t. _( D( l! G$ k+ r: L$ R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" }2 Y) ]8 H% w8 T  r7 B    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 M5 ]/ _* W( x$ E0 _4 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 K* m# E; z5 Q7 x. A+ Q
6 v/ S8 G/ h9 e& v    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 q1 g/ b- s+ b8 R. {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, E$ q* u' n- c+ u$ _' R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% m$ Q. k& i. ?5 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 v. G0 K3 q1 [; n5 D7 t1 g+ M2 k; _) f$ g% k9 f8 [
    CSR = 0x0000;
: E0 j5 g) Z4 t    INTC_INTMUX1 = 0x3d;  m7 W6 P2 i1 d
    ISTP = (unsigned int)vectors;0 m8 n5 m6 N- U9 R# Y4 f6 ]0 C8 x
    ICR = 0xFFF0;  8 X& R. v# z6 [
    IER |= 0x12;  3 n8 \" t9 c) \. G
    CSR |= 0x01;  7 D5 @1 }1 b' ?! l: J/ f4 D% \; e4 l
2 C8 b* S, y: N( r8 @, J( c& R3 c

8 g2 j* y/ w7 t+ a& d
* A' y5 |$ m% J2 B2 o还有就是两个输入输出函数:/ W- }3 O- C+ e( Y9 v3 \/ K8 h
void output_sample(Int32 out_data)3 p, h  a, z& v& w7 `7 K  C. \
{3 f9 s7 j8 Y, x7 m- c0 h7 _
  AIC31_data.uint = out_data;  
1 a3 z/ G( n* D1 y, u  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 A+ T5 ^  t9 f+ S+ [
}0 I  K, w( F, M( ~( D, s

* ~$ ]4 }) J( A/ x6 c3 ?2 U8 V5 P$ VInt32 input_sample(void)6 l9 s/ V1 I9 [
{  
+ X# s4 t9 Y  N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, Q% [8 ~* A0 F( o( t  return (AIC31_data.uint);
$ ~; q* e* I0 v8 v7 [}
' \. f, `' W2 T% _8 y4 ?# r8 v0 w2 e0 l
分享到:  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-19 00:44 , Processed in 0.050113 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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