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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# y4 ^" T# ?) y" u, k' z
main文件:
4 i" G4 Y( _7 z" Kinterrupt void interrupt4(void)  
8 ^8 b, U. P3 U: z; V/ s! ]{, [6 R3 R! W. v* L: Q
  Uint32 sample;: _2 O  _  S" Z9 H- ?' M
/ q3 b. L9 H: `. Z( d
  sample = input_sample(); // read L + R samples from ADC3 A  T5 l4 }: z$ M$ b6 c% S1 c; B! _
  output_sample(sample);   // write L + R samples to DAC
2 a$ f- Z+ }3 e! q% v- }) |  return;
( R4 s- l: _5 H}7 |8 B; [( n! @  e6 p
5 T5 c  b% `4 E8 n5 }, t, ^2 B
int main( void )( n$ i9 H) Y0 e" K
{
! f. w1 @$ y# S, Q2 g6 ^: s/ A  v8 B) h
    /* Initialize BSL */
) |3 g. C+ F/ w; s% J% [2 x* |! G    EVMC6747_init( );3 C9 O9 O: f$ k  R- d( ]4 c
        /* Call evmc6747_intr function */" z5 x3 U4 n/ I- ?4 O4 ]/ w) Q
    aic3106_init( );- P2 K5 v# S7 u' v% ]1 l
        while(1);0 v$ L( o+ L; L4 C7 s/ a3 w0 e9 W
}* w' d  y6 V3 ]
' C" r4 v- I4 W, N9 n( T, s$ x0 @

/ M) ?' U. w- p/ p" Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 r4 K( O' ~1 `% I4 _
/* Initialize MCASP1 */: G/ ~& s* }' _, l4 o
    mcasp = &MCASP_MODULE_1;
: n0 v6 u0 k# g) l- t3 D. x3 y9 I    mcasp->regs->GBLCTL  = 0;       // Reset5 b/ C/ h7 V% ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 E" M6 c8 _/ _7 g# H9 a, |8 y
    mcasp->regs->XGBLCTL = 0;       // Reset TX) D' f! x0 [0 _- M$ W
    mcasp->regs->PWRDEMU = 1;       // Free-running
+ Y0 X' {6 `9 [( A9 t   // configure McASP0 receive registers
- i& _7 y1 Y6 A+ M  \  v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; Q$ p$ y0 ?! M! W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. V2 A% ]9 k; x. @: {! o0 y& e. N
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& J# ]% M5 S* E: z8 N! K. Z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 {9 N* W7 \  I9 r0 [9 L
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ w0 @6 S' F* ~3 a4 u    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: C8 K$ ]1 A; }% L/ A    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 w: D- V8 Q" O) m3 A    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 O& `( o8 i8 u2 c% T, e# F( Q. u4 w; I$ u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 s) g0 a7 w" C; N3 Y9 O: u! w
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: O' v2 H0 t& U/ A4 X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 j0 g' h5 i9 R2 I0 a6 @
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 W: {6 ?$ N$ N5 O9 W    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ J" Z& p2 t. A1 G3 d1 _. E0 K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" B2 R% M6 _8 m- ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 q! ~* z0 ]6 `9 s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) V. [$ A, x0 M9 t! I' N

+ c) P6 g1 [! a1 r    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: r. n# f$ V7 v. m% r, [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' o9 c+ u( p) v/ M& Q0 z) l$ x    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ J5 _  ?  a$ P1 C$ j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 ?8 I2 f) d4 S; O( @, p9 y+ Z: L5 S5 F! q) M
    mcasp->regs->DITCTL     = 0x00000000; // Not used; A  M2 h8 g: e
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' t* G( |- o' [# F; I( M7 ~    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 \& O9 B/ ~0 v3 Y! k1 I, g) v/ ^5 q0 i! a
/* Starting sections of the McASP*/
: t% R! A0 K2 h( V& L& |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 a# z) r& G' p/ G: s! Z0 n) `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! R! |* r) m9 r+ ^) {    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, {. ]$ `9 h- }8 T0 e+ }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 X$ e* J' |( n& ~  r6 h

7 x, c. N+ U( m$ q% y+ v4 v9 O" G    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ c0 m; c( Z- w4 t! l, K3 l. M) T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! d5 A6 }8 R2 X! O+ I. w7 H$ _4 @
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# d; z8 R6 g! D: M3 O7 a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; _% @- b  z* g5 h
/ E5 i: A: @/ Y& k4 ]( Q
    mcasp->regs->XSTAT = 0x0000ffff; + \2 J! _, N- H6 I( t
    mcasp->regs->RSTAT = 0x0000ffff;
1 b6 u$ H7 c# Z/ g
/ @  g7 b5 }5 I) d7 Y! {) E& l- P    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, a4 N, W' S  @" g( M7 [7 p0 e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 c% B, I+ Y% X3 X
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 T$ b! O0 V1 ^7 R2 _/ }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ ~6 h) C4 A# k. T/ w
+ Z1 x4 |3 U8 `/ X- K, R. i# z    /* Write a 0, so that no underrun occurs after releasing the state machine */
, Y/ v" f1 V/ ]4 k    mcasp->regs->XBUF5 = 0;- e1 E# {. Z( K- Y, M' ]
    mcasp->regs->RBUF0 = 0;
! E8 h+ n. J7 O$ J2 b( I$ O
& m1 L! K2 w+ t: p# T; A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% E" X- @: y: n! m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 h% r! {3 S* H0 K: T; A7 L4 K! W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  D1 a$ a% Q. x# @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) d4 t+ X. s4 Z. I

4 w  |% H1 x7 Q, s3 C    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 P& B3 I, H$ N7 e/ @0 {8 U. v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. M$ T% I: h2 f: K% y" h    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! z- Q" y( ]( T  u! E5 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 b5 w$ S, e3 z5 m0 H; ^' j# X& V1 f5 E- w1 w1 d
    CSR = 0x0000;/ _% m6 C2 A* v9 u
    INTC_INTMUX1 = 0x3d;
: F/ o1 _" ~5 g. K6 G7 \1 e    ISTP = (unsigned int)vectors;: n/ @) z9 H& |' b: z
    ICR = 0xFFF0;  
  c. E. n6 \5 M# C    IER |= 0x12;  $ k) j: d/ j' a) I/ @. ^
    CSR |= 0x01;  
* J& t1 \, q" u' r- U) g
, @, h. U5 P1 e6 C. o6 T3 e
& W( a. h" N. {& }' E) {6 K
9 s3 L5 M4 e/ W9 _; i还有就是两个输入输出函数:  x! d9 S* p6 _" O9 z
void output_sample(Int32 out_data)- c. `; y8 M' v( s  ]% P, B5 [
{3 s4 ^8 w0 l, J# o. E
  AIC31_data.uint = out_data;  
6 [; h0 w  C+ N1 t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ u  {4 Z  y8 T8 g* |, Y" K}
8 b' E7 D$ F8 `* I1 o- H  A* P: f) t# m
Int32 input_sample(void)
0 x- P. g2 Y( L3 y9 `2 j; z{  % m) e# T. u3 y  F* h4 c
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 H( H( c/ L$ a4 g2 m1 n- `7 A  return (AIC31_data.uint);4 \! e' ~' x2 l, P4 R/ O4 L
}$ x) a1 ?& o* g6 r4 d7 d( a1 I" o
/ e+ N. d5 [' 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, 2026-2-25 03:44 , Processed in 0.040233 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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