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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' L# c/ A5 R6 c5 D3 Y( rmain文件:& X, d$ _) Y, S% T
interrupt void interrupt4(void)  
% c8 z: x$ J6 C1 a4 m{
1 J& F$ L$ E+ _% |5 a' V3 ^# V3 K  Uint32 sample;
: w% [: K. d+ o5 D/ j2 v# r' y. X. r' k5 T% t( ?2 \. ?4 I
  sample = input_sample(); // read L + R samples from ADC
& q8 ]' R. r) d  output_sample(sample);   // write L + R samples to DAC
3 R2 @" d# L, V* Y& I- v& h  return;: Z, Q8 f0 I* v$ C
}
, q6 W/ ^9 S& X8 Q( ^6 W
2 [( \: @. v" X' s; I! Rint main( void )
1 a7 G% A$ c/ w1 x7 u% H{
2 j9 v( d- N' D- k9 M' L& C7 C  _  s. B
    /* Initialize BSL */! F4 D9 Q& b& o+ [& ]
    EVMC6747_init( );5 z. z& m2 g) W9 V$ N, l- @. C
        /* Call evmc6747_intr function */6 B( k: R- X+ H  G# b- A7 ]
    aic3106_init( );
* H) Q0 k0 z; T5 h2 e7 h! [        while(1);, R% b# k# _! T
}
2 x/ z8 y6 B8 U, p) d
/ Y) n" z5 L# X' }) v
) S% n9 S! s8 d  t  r! |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 t1 |7 M& y( U5 f! H/* Initialize MCASP1 */+ m- B+ _. E( {& \/ Z! d7 Q
    mcasp = &MCASP_MODULE_1;# F: @3 g) M8 Q
    mcasp->regs->GBLCTL  = 0;       // Reset7 ^# {8 G( Z* t: K1 H
    mcasp->regs->RGBLCTL = 0;       // Reset RX
. D# V  P; ]0 @1 M' @& G( P5 }    mcasp->regs->XGBLCTL = 0;       // Reset TX' X8 {/ s) L" V3 w6 x6 c
    mcasp->regs->PWRDEMU = 1;       // Free-running! |& z5 [. V7 \9 k" m7 O! l
   // configure McASP0 receive registers
% u9 M4 w; @0 A4 V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 K3 x, x3 S% i3 O0 b' q" L    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  M  S) A2 Q& O3 S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
  g4 s5 Y, A- e/ \; b! R+ _, N* r    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  ~" {/ A" B. V1 V4 T% R
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- w1 o+ i! c+ c    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ U( G1 C: k& n    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 p- T6 v  c' z# e5 t( f
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 Q$ a% G7 l* {/ e) g$ ]7 \5 y! a- o. w2 w$ m, x3 d+ p4 B  s8 ^; C
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! b" h) o" _- i5 [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, o" u2 ]3 e1 T* v! o
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: K) R% q4 K/ J' ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- f& b+ o7 ~  n2 X9 \1 g9 s( w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" [" q6 `, \) N  a
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 o) P( t( |6 f8 k& t) y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" }( _0 v3 E6 T1 F' F. u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( }: J2 L1 l& L  A' S

& R& L+ c8 z" z# c7 |( E- o% [" }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( H8 x6 o" l4 [" u( o2 R# _  D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 Y  }3 H- w' i0 p/ p7 f/ n3 e% B2 t
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 F+ f: N; \# J5 a1 F    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- t4 m' D2 q2 E  l6 g
, Q% R. X, l; ?$ H6 W, f( g8 A( s+ P    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 G6 |* u3 L: @5 n    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' D0 q) e9 r6 M) B* u/ V. b    mcasp->regs->AMUTE      = 0x00000000; // Not used$ i4 U8 f; h9 O
/ s" [4 @( z9 h9 P$ j0 O# `
/* Starting sections of the McASP*/- y( `; X( ^& o" i- X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' L" J3 X* u4 t/ E* V; W. E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    ~4 H; ~3 }6 w4 \4 a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( N3 k  t5 M! q$ J9 L  A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ J1 x# X8 s3 l- E! h1 O

9 l# W+ ?3 D! B3 m: c( a% |* ^) I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 h" s$ J) l, f: O# K- F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) S# j# R% K  Z* z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 |0 V. y" _! E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 Z9 u$ H6 L% ~) Y# O
' Z0 T" Q+ c, C0 M. F( o    mcasp->regs->XSTAT = 0x0000ffff;
- \! I+ z, P2 G, G3 D- E3 `7 ]# X+ J    mcasp->regs->RSTAT = 0x0000ffff;
! ^) @& B% u$ U. X; ^/ W- _- ]# T# L
3 r' W" `0 L8 k9 i+ t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 R% o/ d! K# m) \& r& X. S* m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% d0 @+ J, Y2 [2 V6 V6 }: d1 e    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % R2 q/ T( V9 b' k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 s0 w. G- [& _9 K

; A! q1 ~+ `' m4 Z    /* Write a 0, so that no underrun occurs after releasing the state machine */
" m2 _" p3 a$ Z7 _) _- b  `) G    mcasp->regs->XBUF5 = 0;
: A* M7 W( _- {# ^+ w. s    mcasp->regs->RBUF0 = 0;  O& h3 K# W. q7 w4 a3 r; G
8 I1 K( Q; U# z( L
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 u; ~) i% H! l5 b% U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% e% n/ O6 _# t3 V/ Y5 d# ?2 S2 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 D! @. F6 U  s4 O" j$ x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 ~" {+ L1 J+ l5 j, t) @8 B2 ?7 m, l
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . y* P: |. t; E* c! M0 n5 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* h4 t8 V( [; h) s+ L6 S+ d
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& o1 G. U- H! d7 @1 Z" j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' U+ n# [8 d- [- k
$ k6 V- K. S# U: L* }- e
    CSR = 0x0000;
( @5 D) S0 u9 a6 }3 c1 S/ e    INTC_INTMUX1 = 0x3d;% j+ D" Z7 ~- x4 H; e' B
    ISTP = (unsigned int)vectors;4 W9 @% `/ Q- V" K1 `1 U, Y0 R- J
    ICR = 0xFFF0;  ( _1 |% |' c/ R* D% C6 y/ s& H" A- ^
    IER |= 0x12;  2 G/ W  l# E1 Z1 z0 g  _$ G, l, C) N
    CSR |= 0x01;  
' p7 D& t2 W/ _$ p" X
. B& \2 L& a9 D4 Q! ~) K8 n7 F" o% S  Z9 y  {! l- Y/ L7 |$ x+ n- w
8 U8 x' g/ C2 R6 Z9 N/ c& H
还有就是两个输入输出函数:3 \4 ?2 v/ f9 z8 J) k
void output_sample(Int32 out_data)
* c: I( q4 k- o: }$ j' z{
  ?& q; W1 i4 F( M' f  AIC31_data.uint = out_data;  
; e! |' n! J  N/ ^9 F9 P  K$ Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 [5 z( ^* _7 E2 X7 \}
6 P0 r9 O/ A* Z4 h
$ J* e! n$ ^: A+ j% bInt32 input_sample(void)! |5 J" g+ j$ M  y7 A
{  8 {% V$ Q: F) ^% v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ X# _  Z( d8 ^/ J* N% N! _/ `
  return (AIC31_data.uint);
, k7 \' k; x' V1 u) q5 Y( N7 ?}
! _, B% j) E: L; I9 s) K7 Z% b7 m, c6 F# T/ m( p3 R" G; y& F2 u' M
分享到:  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-12-11 16:42 , Processed in 0.039071 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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