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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, Z3 A! `0 }& p! ]9 Cmain文件:3 l) S- L! |7 u& x
interrupt void interrupt4(void)  , \2 d( \9 c# J: I+ ]; b- \
{1 ~  q2 k$ P& E* r8 o4 `+ c
  Uint32 sample;5 d6 s! A: O; X  D

9 h' G) a& B1 Z2 [0 R8 p# T  sample = input_sample(); // read L + R samples from ADC
# w* K: P1 B+ y  output_sample(sample);   // write L + R samples to DAC - A) W( ?. l0 s# p2 _
  return;1 j' S8 b* h$ h/ i$ D
}
% m& Z5 G8 v$ a) K9 T, q6 U; B4 g
2 L9 g8 f4 }6 pint main( void )
7 c' k# r0 H) t' @; Q/ v7 Q{
: u8 {5 p# H1 [' R
# _0 t' _9 j3 I- ~    /* Initialize BSL */
1 N2 C; K1 M% _9 B    EVMC6747_init( );
; ^7 \( f% V& }$ Z  E, Z  H7 G* T        /* Call evmc6747_intr function */9 {, W- ^6 {/ W9 b! z) a) i
    aic3106_init( );" I8 E6 i+ B" S# _
        while(1);
$ u! K# p+ S4 {2 |/ q. E}
% r( N& B: D. f* P' e1 C
! Y- I" f1 y2 w: w; A
4 ?' @. C, ^4 iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 ~2 {3 B2 {3 e& R; K/* Initialize MCASP1 */% a4 n4 D$ p" }3 \! ?/ \' _
    mcasp = &MCASP_MODULE_1;
. `2 s  ?: _# u% V$ }    mcasp->regs->GBLCTL  = 0;       // Reset
; l8 x9 }9 X. D' V" r: b; h    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 A9 j' o3 @, F2 U    mcasp->regs->XGBLCTL = 0;       // Reset TX
! U8 l& Q- r: Q3 P    mcasp->regs->PWRDEMU = 1;       // Free-running! c) ?+ U1 x% ?# D
   // configure McASP0 receive registers4 d! R8 L0 F0 f9 x7 ], s4 t
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. k; b0 i3 M. g+ [7 x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 C' J  {7 `1 r, f) c! ?1 v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: m, o* k; }& t* m  @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  v/ d, {0 h. ^8 M    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 h7 @5 S9 K2 ?9 t$ `% p$ {7 o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ n, Y/ `2 {* C0 Q4 Y# d/ c7 b    mcasp->regs->RINTCTL    = 0x00000000; // Not used; [5 B- Z1 O, O7 U5 ]; y% j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" O7 K" w4 f6 V& l1 j0 S$ W- a+ u( F  Z9 V
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, ?( |. b7 \8 F9 d# Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ ~$ |2 O5 [- s# _
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 j% q& }# u+ I' w& ?1 m    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 f% V, _$ d) l# m5 q, ^8 R
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! ~5 b- \" q, ?
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 |8 U& e4 _# t$ C  W
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, b$ v* ]6 e" S& R" Q% V) }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 N" Q+ Q4 r7 V, {2 I3 R

: c  Q5 D- {6 o2 @! |3 r) C    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% x5 `# E9 o( V* N1 y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 l6 G$ h) h! d* |1 ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 s3 z7 V' u. J- M( w# z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; p, S# r. m8 Y- X( P4 T( C3 _! I9 z

! |/ y1 l& m, y! [' H& Q    mcasp->regs->DITCTL     = 0x00000000; // Not used2 O- z; B+ E1 {; F* r* y! a- e, [
    mcasp->regs->DLBCTL     = 0x00000000; // Not used* J! ]$ k* U# B2 a9 x2 m) r7 X( X
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 ^7 j  A8 }( r* h! \+ z4 E/ R1 L9 K8 `: b" ], z! M) o
/* Starting sections of the McASP*/
) x, q- K7 u2 i! f2 [& V3 j    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   l& q  M  q3 q( g: b( s9 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ g- N  l9 `7 [+ ]! Z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ I5 S) q7 u" ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# S8 m0 r& e4 n- n' v' |, w  k, {# n8 g5 \% k1 s4 u: H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' [0 n; H) d! o% Q* [8 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 Z) q! _9 ~* G7 O$ r8 W, z5 @$ {- D7 s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ {% r5 X' y' ]/ Y# K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% x+ O9 T( j0 Q$ U

7 W; L. {7 t. Q# r3 n# ~* d, m. s* _$ L# G    mcasp->regs->XSTAT = 0x0000ffff;
8 f% s! v( t$ ~/ K    mcasp->regs->RSTAT = 0x0000ffff;
' M/ r9 ^5 U# D! Z
# `" u) E! G: \  U+ x& ?, f1 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 b$ |) {2 K; ~0 O) h9 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ Z, d6 X! j3 _2 H* V: W/ a1 q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - p" @, n* `6 d! v: E% O8 w* q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 ]" ?1 [+ H' g: u5 }3 y$ e/ W( e* T. \/ t
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 r1 e' p% w+ @
    mcasp->regs->XBUF5 = 0;
+ A$ j2 n3 D# t    mcasp->regs->RBUF0 = 0;& s$ A1 X7 P  w9 I& Z

4 {, y5 \( q: k  l9 ?' K7 p; B0 T    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. a0 T; q* _, e" d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 k! I$ ]/ O$ ]% J  k8 t7 k7 K0 T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 p6 j" R: w2 E3 t, R) N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& m( H& N# g2 [. ~# f& m
) c6 u5 ~: R8 ^" A/ c/ F, [9 b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 g9 M) w; |- b$ @& ^  {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! R/ c) J; l7 i# O( ]    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * f$ q6 o. ~' S& Q2 m2 m$ f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 e  ~. |- G, r/ q$ b0 p+ @$ C8 ?

- ?* C! Z  n% C    CSR = 0x0000;
. B$ U9 O2 l4 e3 X6 x- b& g8 q, p  j& S8 M    INTC_INTMUX1 = 0x3d;: w2 c1 T% A7 `7 k3 |9 S9 {
    ISTP = (unsigned int)vectors;
  h9 N0 p/ C% T  h    ICR = 0xFFF0;  0 {) a7 `& F  i3 p7 s7 r( H
    IER |= 0x12;  
6 R2 Z7 k; T: B! m: d    CSR |= 0x01;  3 Z! j& I6 Z5 u

5 p* u3 O3 u5 m5 k7 x8 x7 g" }- [

. L4 }- N. ?! k( n" |还有就是两个输入输出函数:( r  l' N2 C9 p3 {& O
void output_sample(Int32 out_data)
0 D0 Z1 l) n; i% s0 y0 @9 J( N{
% @' H7 p, P" L) n  E: i  AIC31_data.uint = out_data;  
# f. \( a/ f; Q7 Z1 a  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 u. r3 ^* j) U, f  u
}0 N8 V' J6 D* \. S' ]8 r

: s0 T7 E# j1 B. n9 o. s2 wInt32 input_sample(void), _4 S& a$ W) A1 A7 X
{  
7 U2 U7 v; U( m  f  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) C0 x7 _0 X7 S  A$ I' l  return (AIC31_data.uint);8 R2 B0 X+ a3 ~$ `7 W* D+ s
}# L  \: L; t- Q- c1 k! T
3 U  l; ]/ Q$ I% Y
分享到:  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-21 15:52 , Processed in 0.040887 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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