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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: _6 `% F5 f, I+ e/ b4 gmain文件:
+ d0 I. U* K, n# a4 s% ?2 Cinterrupt void interrupt4(void)  ; {9 b# S$ @8 g0 _5 I$ L
{
3 e9 y6 k- N% S' c( o- k) D$ r  Uint32 sample;
/ i4 V( g, `3 K; A' k5 m3 I3 }9 N8 ]) C: P! y
  sample = input_sample(); // read L + R samples from ADC1 H) x4 a" a+ R5 t) _  O
  output_sample(sample);   // write L + R samples to DAC
& K% X+ u/ P! S# G3 R7 @  return;
6 U1 d% {2 R. v* }5 u8 e}
, w8 u5 Y9 Y+ ]3 K
9 A% s0 |) ~) a0 Mint main( void )* m8 v0 l/ p$ Y
{
" i# k) \  i, P, V" J3 ^, Z
0 K0 F  |% R# u# f0 `3 h7 O    /* Initialize BSL */
& q$ I% D; k! v& Y% b    EVMC6747_init( );( J  U& P: K1 I! L3 w9 K7 I6 r1 B
        /* Call evmc6747_intr function */
, N# a- _* }1 g+ L, [! i3 u3 e4 e    aic3106_init( );" b5 z. [# ~) a+ `) S2 s
        while(1);1 n. S3 e5 F, L6 b  M# O4 S+ o" z5 N
}3 _1 \$ M7 m- @. T/ T1 G7 W
8 ^, a. Y& N  \2 S2 q
# i' ?7 X2 \0 j# c- F7 E* A9 ?! e4 D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 X5 X9 r% p  y  ^- N* U
/* Initialize MCASP1 */
4 l: r# |+ u* W1 f# h    mcasp = &MCASP_MODULE_1;9 E) l2 Q+ I. t
    mcasp->regs->GBLCTL  = 0;       // Reset
* T# {& q2 p0 M5 r' V3 i    mcasp->regs->RGBLCTL = 0;       // Reset RX3 T1 k. x7 p( `4 E2 U  ]) q; j+ v
    mcasp->regs->XGBLCTL = 0;       // Reset TX* X1 B/ O, s5 L9 E# }& y
    mcasp->regs->PWRDEMU = 1;       // Free-running: j% x+ v  y3 {) n: n* z
   // configure McASP0 receive registers
+ Q9 Z1 e! f# L5 F' @* _4 l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ ~0 z& \" ]- @7 x1 M0 i# T6 H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 G  T6 C9 t, P& k* Y+ {    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* w1 A# N; r2 d1 R    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 g, a7 A- e1 \/ C    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ ?% ^$ a( ^- n( \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, Y+ e  G- H, h    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( w2 s! w3 L1 b! O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( S( T! d- l- ^& m: r

  ?0 w6 q; R* T    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 n; T) i7 H7 R% M5 |
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 V* V& d7 Y' q. x& l% ]
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- ^* ]& p4 A& V8 _- b% G' P
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: F" k* V" ^3 h0 O/ a
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  S: v" }2 C+ b9 _* p) [0 U2 r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" b* }3 w# O' T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ Z& d" `  C! T6 d: s! M3 M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 N7 P4 o$ F& y4 b4 }3 s
: Y+ H5 b; C. z. ]$ R1 k  s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: [5 e5 o9 u  q& x; G1 V    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 s1 v6 Q4 f7 K4 l6 z$ e7 e0 P    mcasp->regs->PFUNC      = 0;          // All MCASPs$ F' i" |' x  o/ O7 S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 B* V3 z5 L, Y1 s! ~1 Q
0 ~+ F% h2 @& C, }% J5 n
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 |6 Z, M6 f1 V    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& S( n  H1 f+ x; J9 Q    mcasp->regs->AMUTE      = 0x00000000; // Not used
! G$ p* A3 m5 S
% z" u, u5 c, W0 m$ g/* Starting sections of the McASP*/
) _) l5 Z, H" s( Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  q0 O  F: ~0 Q% W3 M( j3 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 l4 I0 o  o0 w% |; @2 s7 I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   M: t* A; A- m9 P! z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 b& v, c. z/ u0 N/ H, p5 d4 O
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 n" `5 s5 k5 V* a! [6 R) j5 d  w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ e4 z; w$ N- K. S; b; }( D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 S7 d9 L. J# [/ a5 S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' |( o$ E$ M: g/ ?

; q0 p4 }4 F2 s, F    mcasp->regs->XSTAT = 0x0000ffff; 6 B3 s5 ]1 ]- u; Y  I! o
    mcasp->regs->RSTAT = 0x0000ffff; # a6 p; ]3 \6 B" [& U

4 f, N  ?! O! `5 `    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 `4 ~" J5 ~8 w5 z* M2 c+ s0 u. B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) `% ~% y' x) U  `+ v/ a
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & J' k" @5 @3 c+ U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# R* f, ~; Z& b7 n
6 j" o& W4 J/ |! J
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 d& S9 z2 H: V( S' g5 I: }1 S; S) Q
    mcasp->regs->XBUF5 = 0;8 E8 v" ^" x' q8 T# A' j9 R( I
    mcasp->regs->RBUF0 = 0;1 z8 }% C! w- A/ D

' _9 u3 G% z1 J- ?4 c7 p8 F2 d    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - e: y3 Q& Z' \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) I; y; h) c8 k) s- b5 D, ?! F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 h7 k( ?% E/ s- d2 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( P+ S, I: \" E1 x$ {& u
# x- `. i; Q' s7 M    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! N+ M! w* ?" G* L9 k4 J6 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 y% c; e, a! k: y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. s3 O$ s6 }/ v+ s% `+ U5 [5 p3 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, c' u% R5 a0 U" u6 ]6 m8 Q4 k9 `8 X; {$ c) A" O2 g
    CSR = 0x0000;" @) w$ H& r! m) K7 F4 j7 B
    INTC_INTMUX1 = 0x3d;
2 t" \/ e5 o9 t/ T4 k3 R. h    ISTP = (unsigned int)vectors;5 ?4 J( R. }- R. n# V' j
    ICR = 0xFFF0;  $ ^/ F2 b! l8 e
    IER |= 0x12;  4 s) t/ f* Q6 R9 }6 n( K
    CSR |= 0x01;  ) J4 W, B/ [' x4 w9 f. j5 f' k

) Z5 N1 S. n4 N4 _$ @% Q# d$ r+ u. M' T# w( V
2 H) D( n! A; Q( z( ~9 D) y4 _
还有就是两个输入输出函数:
0 H3 c! D3 y8 p" P0 t( Mvoid output_sample(Int32 out_data)" N/ k. K3 B: [3 E9 G
{5 C( ]. n7 s$ {! C5 s
  AIC31_data.uint = out_data;  
) ~( E- k, |* ?% F4 z3 Z9 g  MCASP1_XBUF5_32BIT = AIC31_data.uint;& a! w  S% C+ q! K& \: M
}
) h0 L* @4 n3 K6 c# y# N5 i  i- X3 j7 t7 m1 `5 m8 S3 J
Int32 input_sample(void)
( o( N( U7 `( M; _6 K{  
) w& t' R# k$ l5 ~6 J, I  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 @3 X% |1 E' e* @5 m& y- ^, ]0 D  return (AIC31_data.uint);0 |! p7 |" Z" L" v$ r
}
4 Q& @" I4 g& t* o; I/ l( X4 y# v) w/ C# M5 b$ V& g* @) k/ S
分享到:  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-1-30 08:07 , Processed in 0.042560 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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