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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 K6 j7 H7 I% C9 R6 i
main文件:
& }  @( ]- O) S9 e, `# F" o2 m% J$ Ainterrupt void interrupt4(void)  
9 p" A7 \$ F( b9 d! U1 G& n" `' Y4 t8 `{
* ^+ v( G+ f( P6 m  Uint32 sample;
* `7 I# }- x* s9 n6 o2 L2 }, }; w& l! L5 A6 t( S: m( e
  sample = input_sample(); // read L + R samples from ADC
" L8 ]" g" V# V) G, p4 ]  output_sample(sample);   // write L + R samples to DAC
2 |6 d, U( k# Q  E$ W4 s% T2 R  return;9 |4 k; j: ]& p
}
- l9 b1 D8 V: P0 O+ q
. k: W- k  i1 ]' I6 m+ ?1 m* C* Kint main( void )4 l7 I5 L, m' k+ {! {
{$ p$ N. y. C2 A+ R+ w6 [7 P5 f) D

/ ^. ~; y$ a3 g6 J3 _; y% C    /* Initialize BSL */
. @' r0 g9 }1 H& W) Y/ F! I" S    EVMC6747_init( );
& ?- u( _+ Z3 ~# Z2 a4 P! Z' g  \        /* Call evmc6747_intr function */
3 C, q2 ~5 o- u& g( o9 W    aic3106_init( );2 L9 F- c4 L& q: L7 Z1 r* B% ]: }
        while(1);
- s: ~; y% X0 G# ^: E. X}- c+ \. _) b6 P2 r

2 p) x9 W7 T2 ~% ?7 V: P( [0 E, _
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( H" o, U9 t) s. F7 }7 r; \/* Initialize MCASP1 */
# r9 J* \6 F. r# q0 J$ B$ i    mcasp = &MCASP_MODULE_1;% H9 }3 L* O7 ^/ B4 A, }; V' O+ n
    mcasp->regs->GBLCTL  = 0;       // Reset
& w, I2 @5 v9 C! e, q. Y    mcasp->regs->RGBLCTL = 0;       // Reset RX- G2 k- k  a9 w7 I
    mcasp->regs->XGBLCTL = 0;       // Reset TX+ k6 O: f! Q9 o) k
    mcasp->regs->PWRDEMU = 1;       // Free-running5 F9 E4 c  g$ s! P3 Y
   // configure McASP0 receive registers
- _7 m3 _9 Z. H7 }7 L3 H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: J' Z. t# m# w1 B
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( e/ G+ A% U  K3 [9 D6 Y- |( K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 F  G4 L6 A% V1 v/ I2 y& t0 x8 @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 j( b% o! I1 G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 k' {; F* ]3 L$ B5 S. ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 J- a+ a7 P# S    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 n0 X! N- B0 V8 e' D! F6 Q" e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  N' h( S" ^9 i1 n& m( N& w; w0 v/ D9 U- W. w6 s* O+ X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 p5 o: y& ~5 o" ^+ C+ m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" w- }0 j; A2 e: A- r$ j    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: @4 }9 g2 c9 W3 L, }1 l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 ~$ g& y8 F: `2 O
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* u9 @2 l" a9 p3 C5 e+ Q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' J( j6 @" V9 ?( g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ n) w; C4 V$ [" S  D    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" f6 s3 h) ~/ h0 d, W& J7 p: E/ m' T% O; H: d, }) f
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& \$ B9 G6 B9 h1 E    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 z) \# K( |+ t) e
    mcasp->regs->PFUNC      = 0;          // All MCASPs! P6 T! _% V- A: K4 Y4 K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 d- ?  g- @8 ~' _0 }! z3 [

3 Z1 u8 f% F4 V9 x/ l* {% I    mcasp->regs->DITCTL     = 0x00000000; // Not used( W3 z: L6 I, @4 ~: U$ {' `$ P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 y5 E4 w& `$ c! u
    mcasp->regs->AMUTE      = 0x00000000; // Not used- ]; f* V6 T% h* c/ S) S. Y
0 E1 z% [9 }; f
/* Starting sections of the McASP*/' V7 U, z6 I. E6 j) a) @7 m% n4 `' R
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' p. ?! P$ u/ Z% s* n$ c: u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& B! @9 y7 K' F8 u/ z# h    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 t- U& f0 `. ]' E0 P& n7 y4 t7 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 y* u6 ]1 u  y" u5 {# z. t+ U* M4 ?- J6 H( Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ [( U' c$ s- W) i! h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ @( n1 G; W4 r4 ^* ?6 x5 [
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; M, C& R& X: j- n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) n1 A# k$ I1 i4 |' I, T8 m

: h9 V4 o6 i: l& I    mcasp->regs->XSTAT = 0x0000ffff; 0 D' b7 [/ `9 }' ?2 ?2 Z8 i
    mcasp->regs->RSTAT = 0x0000ffff;
) o5 q7 S$ T0 t) q* a
+ `% V0 }% Y2 T2 ~5 x+ S    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( h9 ~0 H& r2 _. z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, o% x2 t0 I8 V. O
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' [6 l7 A! t/ m8 d' z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! F0 P5 c4 A% {5 Y7 O; _

7 h$ a8 P1 z0 `" b    /* Write a 0, so that no underrun occurs after releasing the state machine */
  x6 m! g% t# a5 o8 l) [; X, {    mcasp->regs->XBUF5 = 0;
. t; h9 O% o& F% n/ `" p    mcasp->regs->RBUF0 = 0;
/ W, r3 i- x2 a! C0 M, Q9 R  Q
6 r) L, a9 C- q5 S% Y2 _& q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 Q1 P5 z' D+ ^# p/ X1 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 l# g9 {* U* \) F+ s  Y) R    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 g+ ]9 B% A3 L# I( Q' b7 }0 {' w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" b7 j* W$ t/ ~
) \1 k/ @: N+ X
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ F! \2 E0 z# {* K8 R; p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. `1 `0 C' u% W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  o1 {! ~2 I# R: B+ n7 R7 ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 ]  z3 V2 _+ F# ^+ f

- U) n% a( G4 I' S. _    CSR = 0x0000;# r9 t7 D/ H/ p4 [
    INTC_INTMUX1 = 0x3d;
: x+ Y: t+ d3 w7 s7 K    ISTP = (unsigned int)vectors;
7 a, R) c( @9 d    ICR = 0xFFF0;  # P# G. m& P: {/ L* Q8 P& ]
    IER |= 0x12;  * l  G; X6 F( x! J
    CSR |= 0x01;  
4 V7 T- G  Q! b! h: Z5 ~0 S- Y1 ~" ~7 P+ y  d' X/ O1 g
0 M: l% T4 X; p3 ]
5 ?/ Y  m- ~: F) }9 z  ^4 n
还有就是两个输入输出函数:
) F" T& _& y: i, W: X0 R& kvoid output_sample(Int32 out_data)
9 ?* |3 e% v) W8 S5 H* }1 j{
3 |% E: c8 C5 v/ y' J  AIC31_data.uint = out_data;  2 k. d3 q; n9 q7 |
  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 w1 S0 ?$ C$ v
}
1 K* ^9 K$ }) i* i: K& I- T8 p; S1 `/ C) L; i
Int32 input_sample(void)
' f5 c/ u8 G* N& U, S9 s# B{  4 i$ P$ f* h: @9 Q% K% O9 c" y, o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 _+ H; e2 ~: e  return (AIC31_data.uint);
9 N( Z$ ?5 a6 [/ M}: Z! I5 t  x/ H1 C' @) y& i& s

0 |( O$ \7 p; |, N& 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-11-26 10:18 , Processed in 0.040498 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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