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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" G4 M& C* r3 K2 \3 |! e; Imain文件:
  F8 T  j4 V) y# b- l$ zinterrupt void interrupt4(void)  + z0 S/ }! y  X# q
{
8 V0 x; ?7 B* l/ |# c1 G: T  Uint32 sample;
" S* W0 t9 D7 L" o4 F
- q% ~9 n* a; t! ?( t1 L* ~6 ~  sample = input_sample(); // read L + R samples from ADC3 ]8 O$ I3 K! ^
  output_sample(sample);   // write L + R samples to DAC 9 s, F) F; [# ^
  return;- w9 Y, W$ |4 H6 `! G3 F
}
5 S6 r/ k& y# q: e  a: o. X: ^
3 t8 i, h8 ~- C1 G: n. P7 f1 x& t% Aint main( void )
! u* W: P/ A8 q' R- C* ]5 }, b{
! P$ n# o4 K, b0 m
$ ?( \+ N; r! k9 n" Q    /* Initialize BSL *// p# L7 B0 `5 J! ~$ K. j9 U
    EVMC6747_init( );# O% p( L6 Z# [" c" l2 @2 |+ r! d
        /* Call evmc6747_intr function */! w' l+ x9 ~% W* [
    aic3106_init( );
- E% m4 D. C& ^% \( ]# f        while(1);
: S  y, F4 U9 e8 Q5 W# s0 R}( C9 B8 g3 o+ o0 d; G( C. @$ a
. e3 f7 C" e" E
8 l- m; @, o2 H, }$ c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ u/ F+ Z. [  s& Z) R7 R  b/ G/* Initialize MCASP1 */8 v3 _( _& h8 m
    mcasp = &MCASP_MODULE_1;: q% S* g8 \/ \
    mcasp->regs->GBLCTL  = 0;       // Reset
  F- B" m: B" E+ m7 y    mcasp->regs->RGBLCTL = 0;       // Reset RX, f2 W/ S$ A# M+ C3 j6 a# h" a  u& R
    mcasp->regs->XGBLCTL = 0;       // Reset TX: t  b# L# H) I5 ~
    mcasp->regs->PWRDEMU = 1;       // Free-running$ N/ D$ z7 g! z
   // configure McASP0 receive registers
* ]" F( _$ d: u# J/ v9 }0 H/ I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 x9 |5 u- K4 U" X1 S- m. @    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 F0 T. X5 b  U' q9 D% z( x
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 k: {6 h; `* x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ @( u9 J+ [- D    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 p$ b$ r: Q) l6 q3 T) E    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 a4 M9 R" K5 c) U' @    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ o$ n7 l: U& r$ ?  x: c    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' `- ], m7 e5 j  I, w. G  e

% j% K" Y. f% ~! l    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 `2 P+ K# m! s9 Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 b3 O( v/ ?# r$ i8 r
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 ^& N9 y: \! `6 e; c) Y3 T& j    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; s9 _0 [' y( y7 B- @0 f
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- f4 t, r: J4 a
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( E" w* b( i# J3 p( s    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 O, ?1 ]8 m" l    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. S* y8 y; s  }- Q* k5 k

9 d) L& x  T# e: C/ s; x% O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. @% u+ ~6 H. F    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 V5 E5 S/ D# G+ W% V, t% l0 T    mcasp->regs->PFUNC      = 0;          // All MCASPs. F3 `- m& z+ X
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* E( \" l- O! E" X- A8 x+ z  W% I; b. h
    mcasp->regs->DITCTL     = 0x00000000; // Not used! U  s4 e0 V7 L9 M2 ^5 l  N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# f6 S- B% _' x& C" X3 @% c2 x    mcasp->regs->AMUTE      = 0x00000000; // Not used' S  L6 u5 r% ^& x. |1 d

. p. O) {! V1 S0 A* C# X/* Starting sections of the McASP*/
' J6 ~) J/ }6 s/ W$ E9 S5 F4 D) c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & X$ ^2 ~1 G% }: s3 J0 v% s0 @8 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 Z$ p7 z# j+ i    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 W& U) P. D1 ^( B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 t: |( r4 t' F+ }

' N, b2 I- p& ^0 O0 @. g7 h. ?    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ O) D# j+ J1 @0 U5 F+ }/ R% o3 i/ K  B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 F9 x# M: M7 F$ v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & B/ x5 j; e2 Q# E! m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 M9 m  u, a6 a

0 `* S8 V8 [+ A) W" w" t2 Q    mcasp->regs->XSTAT = 0x0000ffff;
5 T" `7 h* Y* v0 n& ]9 W/ A    mcasp->regs->RSTAT = 0x0000ffff;
5 i- P2 D) w: d' I5 Y! Z6 W
/ f4 o4 Y% F+ x/ k' z/ J    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Y8 m7 j7 \- \( P8 c6 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  Y, m8 m9 Q+ I( n1 f  I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 v% p3 S4 Z* d% b0 p" W: N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 N- H) h2 O, p  N2 n5 ]  m( ]
) X* N/ @, y/ {
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* D# r3 F& z- J2 a- W    mcasp->regs->XBUF5 = 0;
( }( r' U9 B" O) f! ?    mcasp->regs->RBUF0 = 0;3 B6 g1 r. b/ W1 b8 {5 {5 ^. A' q6 Q

5 Z2 Z, M4 S  R6 t4 \# V7 K6 j    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , \0 o* S. [2 }0 C" [/ o* u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& k0 [4 s8 I. v4 C. u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , _/ p" [2 a% X4 ~/ t7 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, c0 q( a' @* G7 g) A( e: ?* z

" z* H' n8 \8 B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 G' s% \, d# z  e) y5 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 A' C  e0 G/ E8 T$ D/ O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 z% ]5 j3 U# i3 g4 P# e9 x7 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* j4 q. Q% v. v4 g; c7 k3 ]% u. o6 l
    CSR = 0x0000;: _" Q# c7 @& l- x5 B0 m
    INTC_INTMUX1 = 0x3d;7 M. _7 F% _# o8 ?' l
    ISTP = (unsigned int)vectors;
; ?6 @9 z+ w$ [& X5 q4 Q    ICR = 0xFFF0;  $ ?$ ]# N5 {7 F7 i
    IER |= 0x12;  
, M; P# v' e1 G8 x, J$ I" ?    CSR |= 0x01;  
) z& X' T# T3 I# X7 Q
( D+ t/ S. ^. h# v' t2 K
& g/ d8 ~: F$ ^! w1 _2 {
6 C- a. n. I& I9 Y* D还有就是两个输入输出函数:3 A) s  O. {! I' D9 r
void output_sample(Int32 out_data)
9 b9 t$ l! ]0 L% t9 }7 m. K{
: k- E1 K, D" Y  AIC31_data.uint = out_data;  
2 l  }$ U; a+ m# n  p; }  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- d0 L4 b- G" K: M* F- C! L2 F}% p. T7 O& j5 X1 `  W$ G. [" \  n
. e3 }+ Y7 m/ o3 F. z' H( ~
Int32 input_sample(void)" [( C9 n) m5 @* k, @
{  
- @6 T3 C' f4 V' o, L! {) }& y  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 Y# x$ l3 F8 J4 h
  return (AIC31_data.uint);
( }" K  g8 a0 ]# W- X; X% U}
% E2 h+ n( p, j+ g" d! f: T9 ~. {" |& g, d) u% 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-12-3 03:36 , Processed in 0.039250 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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