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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 d. l- K5 b4 u  B- ?
main文件:
; e4 i" ~" M0 n$ `  {1 rinterrupt void interrupt4(void)  
- n, \$ B% O5 y' A! C9 F8 r{
; X+ T' [- U8 N( C  Uint32 sample;; `5 I+ H& |1 T" e& Q1 `* c7 u, Y
' y. r. @  p" F8 b% r0 O
  sample = input_sample(); // read L + R samples from ADC0 W1 f6 G( f4 \+ l, e- s6 W
  output_sample(sample);   // write L + R samples to DAC
- w9 M$ t) I: t0 l, K3 e  return;; y" F+ q, y+ D) C
}
( f+ F) l3 K" ]  e/ W# H9 S' {. u1 t9 C2 g+ K" J4 ]
int main( void )
/ ~' l! h' D& h/ N" J4 l' b; c{
7 \$ j, g2 j, w( X( m7 v1 V, J# \! A' ?
    /* Initialize BSL */+ [- D( \' n; c& r) C
    EVMC6747_init( );$ g3 }2 @& v) \) D/ t: X; L% A
        /* Call evmc6747_intr function */, c* K: P5 @3 a9 ]1 t6 Y
    aic3106_init( );7 {2 U& M) j+ K) U, n
        while(1);
6 C, @& q- h' T}
' Y+ c% f( m: N" b$ s, A
3 J3 b, X- c5 g' L& ?* j, s4 l
& ^; n1 p3 {3 s6 ]  t3 R& E0 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, r- ^! g, F$ i1 r% b
/* Initialize MCASP1 */
9 S* N) W! q  K5 t    mcasp = &MCASP_MODULE_1;
! O" G- I# `+ V- [7 S' ^    mcasp->regs->GBLCTL  = 0;       // Reset
3 U" v, ?2 c" E5 S& y    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ K- b. d) t# L; r5 K* u    mcasp->regs->XGBLCTL = 0;       // Reset TX! T0 K/ ]8 s5 ~
    mcasp->regs->PWRDEMU = 1;       // Free-running- H8 ^. N8 {9 p0 z
   // configure McASP0 receive registers; |8 p/ g% P0 f" U
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" O8 @! v5 y# J' E, L
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) Y1 m4 t) `. g3 e
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; ?: P8 U* z, U/ h    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% a6 ?$ M  j4 d2 R) u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" o" A6 b1 `/ w' S& Y' Z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 L' K- k2 i9 g( b0 K" z' S    mcasp->regs->RINTCTL    = 0x00000000; // Not used, L( O) I0 H& q) w! w. U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- P6 B% M3 M! c
( Y0 x- a+ y* n; [# ~% s; s    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  v7 |0 d& c* }1 A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 U1 m% }9 B% `6 v8 ^    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- Z) ?: [# B7 P% Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- Y3 O& B$ Y! W3 C$ [3 f
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" D+ S* j8 p5 m" m% N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 a0 F% P4 m4 a' O& r! F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 a1 f. S2 l, `) p0 E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" s. l5 E! }. j* |& G$ a' w, Y0 f! H3 P+ i& J. z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ `, K. A2 a8 y3 I5 c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 F& {8 i7 s7 T: B
    mcasp->regs->PFUNC      = 0;          // All MCASPs6 Y% p% U4 n$ `7 R
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 k! E% @$ ]; B8 r# r) {

$ c$ q3 _& i4 x6 p$ p1 W    mcasp->regs->DITCTL     = 0x00000000; // Not used+ @9 P8 O1 v+ I# N+ o1 }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' \+ d# H; f  S& t# M' s1 q; k
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& J( }) q' t; E
8 _2 T4 y/ d, Z' K+ S2 F( j6 [, V/* Starting sections of the McASP*/
4 k+ @" l6 U, S4 H0 V3 `4 |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 j! H$ Q& e1 g. t6 R* n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 B* @, a6 t! I( b    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% A. l  M* t1 f. t* t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  v6 t5 W5 C* ^$ h
& c; D0 l' X  V% c( O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - A4 j* p. o  ?; W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 A. C+ w& c+ r1 ]    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   w& m9 ?3 i" _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 ^. \7 N: {0 ~# r8 K% W
1 _0 u) |, ~  O# |* O; W    mcasp->regs->XSTAT = 0x0000ffff; ' L( r* ]1 \$ x
    mcasp->regs->RSTAT = 0x0000ffff;
- e+ u. {3 I2 \7 {/ `  D3 l& L* U; D3 X& U! `& Q% v5 I0 \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 a; g0 i" b2 A3 V* a5 R& v( L3 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 T+ {8 V! [* ~  E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) o- N) J, c/ x7 J% O" Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! G# |# k1 u8 Q5 A2 a1 u

# t& G7 f* W1 Y- r    /* Write a 0, so that no underrun occurs after releasing the state machine */) f* Y3 [9 v1 E
    mcasp->regs->XBUF5 = 0;5 C- r# e" p! }  I9 G# H* U$ j  }
    mcasp->regs->RBUF0 = 0;0 T' E# O! G; r4 V
9 ?9 [/ z0 s& }! }' |; G7 M$ B/ c
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 ?- n0 D$ J4 S1 ?3 H5 J; `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 B" {! [( t# W) B% v/ s( \0 Q& J+ q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - Q1 u$ W% p7 Z+ f+ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ P+ S* i9 d. s) @7 p
! u+ p% _# ^1 {# [/ `  ?7 @: a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 P  o/ W( }$ q& u; C* p' s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 [8 t; C: P  r$ g* N1 x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : u! p; V1 G/ q1 u( M  s- w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ E+ H# B1 ~' _  {+ L+ J* x
9 C* Z  {' f9 B+ V' N  b    CSR = 0x0000;6 f* G# |8 ]( ^8 J* s
    INTC_INTMUX1 = 0x3d;
: S  I- t4 Y' ~+ _2 u    ISTP = (unsigned int)vectors;0 z" R" z. A) n% k. Z
    ICR = 0xFFF0;  
, I8 c  [% Y9 l+ t# M; O    IER |= 0x12;  
2 y0 ]  i/ O, q; H    CSR |= 0x01;  2 C+ A+ p1 c3 L7 Q. q7 a/ q
4 z" x8 L4 v/ c3 S
% Z8 r, l( r' z0 s! B
' V% P$ J  A: U; O8 S: \
还有就是两个输入输出函数:
9 q& E) a* E7 Gvoid output_sample(Int32 out_data)' M! ], I! R& Z1 z, Q
{1 H5 g$ f) q: W8 O( W
  AIC31_data.uint = out_data;  
5 W5 @+ [8 V1 U# [. g" k& l  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 Y4 A) m8 k/ }+ |2 Y% ?/ W7 A
}1 @8 p) K# i, @6 Z; Q3 o) C

) Q3 C2 O! G5 [Int32 input_sample(void)# b( Y- D, [! T! ?
{  
4 Y" T2 o2 ~; G) ?3 K( X  AIC31_data.uint = MCASP1_RBUF0_32BIT;; g1 P& s3 @6 L- E. x9 m4 s
  return (AIC31_data.uint);) e5 x  Z' J- a& }) y" E! X0 Y" v: B. c& w
}
; a  i5 n; `: r% o9 y+ W. e3 r3 ~5 [# B& e- U0 Y' e) K
分享到:  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-4 14:40 , Processed in 0.039313 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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