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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 P' ~( {. U- @- t9 p8 v+ f
main文件:8 M% K3 |5 [! M8 l. X: c
interrupt void interrupt4(void)  
7 G2 T6 N6 ?6 g{" I6 i: `" C# X- m+ z* {
  Uint32 sample;
+ D* E$ K3 ]6 R1 x1 w  C6 p3 a+ M, o5 H) m! `' w" H
  sample = input_sample(); // read L + R samples from ADC5 y( P. u" i9 q. R$ z
  output_sample(sample);   // write L + R samples to DAC
% s; A' V: {3 u) C+ E  return;
4 f$ q2 V1 `  D  J}
" C+ ^7 {& [% K# {0 j8 {, B4 r9 I3 L) @" _% p7 [  J
int main( void )( @6 }/ E8 z! M9 m" F2 Q
{5 y* X  n9 \7 B
, j. C% t7 H" T5 u/ A
    /* Initialize BSL */6 A7 w5 Y+ L1 J
    EVMC6747_init( );
& z) ^1 d5 i/ W( X4 ]' J# y        /* Call evmc6747_intr function */
2 c3 N; `' A- [1 P4 g1 ~    aic3106_init( );. f6 {+ x1 I; K7 b9 ^3 a
        while(1);- R0 n9 O+ {" x6 E( v( N
}
! z% `$ V' {/ r1 ^/ G& @% z. X
' x" L0 I1 Y6 ~0 r
! b* H1 q  F& g8 M5 ^  w, u! E" s2 ^  Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 Y4 i& f5 c9 A* E8 l3 Q6 ?" M; @% t4 O/* Initialize MCASP1 */  C! s+ x9 Z$ b" T; C
    mcasp = &MCASP_MODULE_1;
0 r. ]; O# ]5 t( K' K    mcasp->regs->GBLCTL  = 0;       // Reset9 a1 q& @( z+ }& J  f0 ?5 ^
    mcasp->regs->RGBLCTL = 0;       // Reset RX) l8 T' o/ I( N: l: C8 ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 l4 V, m4 g3 c    mcasp->regs->PWRDEMU = 1;       // Free-running0 c  a7 h1 }- T
   // configure McASP0 receive registers
; R4 {8 }4 p" j8 i. E6 v: x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 G# {5 k) X3 Z" N    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, {( T! l6 Y' A6 [
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 [+ u3 D2 m4 G8 [% |* ]. m5 D2 y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- b6 g. E# i) \& y8 x: t. s    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 R* q7 D/ ^9 b+ N3 @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 N) U) m) k+ B+ Y1 Z: F6 l    mcasp->regs->RINTCTL    = 0x00000000; // Not used( |& ]* \0 c8 _9 A8 o
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* `4 T2 `% e8 U6 @1 s9 M$ }
* C7 ~7 c" P& q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: y- w; X' A1 F* t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  |3 L$ E2 ^/ _- u, A) N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- h; B% a" l4 v, m6 ?8 e8 Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& A! o2 b& t0 u* p; Q. f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 ^7 B1 f1 _! V3 I! d1 f4 \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ L' n; u( p& g; V; I( u" t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 K+ I  b. V# b; U1 y# C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- y7 W+ j& J, E; K; t1 q; J

: D: }5 e9 g1 P9 ~, o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 K! [# ^$ S6 L( b, i! l5 }, N
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 j9 X) D5 q, h' u( `/ |5 e4 Y7 i    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 W. ~- o3 D- b9 W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' |; p% \* x0 U( Y1 F
6 ~$ h0 M: l/ Q( Y- y* B/ V    mcasp->regs->DITCTL     = 0x00000000; // Not used3 l- d( `8 {+ y' W
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 I9 a8 N6 c2 Y- ?0 m    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 y9 C( H  z: N2 P" E2 A' X2 L2 A  U2 z) ^$ x1 U: ~
/* Starting sections of the McASP*/  f7 m' L0 V8 W" G4 U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 b; H( D$ D$ |1 S2 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / I( \+ v" Q/ _( {% F- K: S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ Q: G# `: z, v. J! ]& D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" E7 a& a1 a0 o, r+ Z! j( b( Z/ [' y; K4 w* g1 ?0 l# o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# X# q! ?8 t& h' H" x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( }) B$ ]/ v- U9 w1 @
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ x4 H' e! v1 M% s, U0 B1 p1 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ ^3 p& v; Z2 n6 |# u2 G) D
: L3 p/ M( y2 _) t( P* X" @    mcasp->regs->XSTAT = 0x0000ffff;
) \/ P  Z, P/ X' I+ T' i    mcasp->regs->RSTAT = 0x0000ffff; 5 H6 [7 T* ~' ]& `! k

1 z' G, k3 x1 N3 _3 M$ [    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: M( o- M) h% t* M. i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; X" Q3 k4 S) ?9 `% N! R7 }
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : x& D( h+ M% F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: O: G* ^: ?0 V% @) n3 s2 ~! S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
& b3 u+ B8 D1 i3 y; C0 [    mcasp->regs->XBUF5 = 0;
- w! U' l0 b, |/ ]5 k5 t6 N* A$ ?    mcasp->regs->RBUF0 = 0;5 S+ ~  B( n1 v: K8 G
- t  T/ @/ q; {! u. V, v& l, ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 ]$ x2 H; U* c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ t4 l, _" a$ u& _- P    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( l  s; r  D% d! L( r  ~5 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" c2 J! e: t6 B1 I- [# u7 H
6 B% P  y* m" v2 [+ h    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # Q9 z$ v6 Z& S- K0 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( l& G0 e+ L5 T' i: x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 g! a! @  G! ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# j4 C5 l8 P! C  K7 u; V; L& I7 m1 G2 d% r
    CSR = 0x0000;- v+ x* x1 }' j9 e7 c1 K$ ]
    INTC_INTMUX1 = 0x3d;; f+ ?, h) {4 @, m: L5 _
    ISTP = (unsigned int)vectors;; \! o3 D% u4 j: S) N
    ICR = 0xFFF0;  
, S* R* ~& @9 k$ ~! }    IER |= 0x12;  8 j2 ]2 @/ w8 p' f7 T% N+ d0 p1 N  T6 I+ H
    CSR |= 0x01;  , r" ~) c' e9 K8 h
, y3 H8 h$ x6 k) r) ~
+ s3 a1 l( c! S3 ^8 l# V
) U; I# j' _  W3 v. L1 S5 d
还有就是两个输入输出函数:
# Y" A# e9 m8 x6 T6 H9 c% {void output_sample(Int32 out_data)
9 U1 o& z9 N# |/ U$ s{
3 x% s& {3 |6 d! y- H% u( Z  AIC31_data.uint = out_data;  
; }# H6 i  |: X3 I* g9 ~4 N: A' j  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! p0 Z; v; R% W9 `$ n8 p8 [}# I" W: _7 H6 Q
! S, B' U5 ]7 T4 G% O
Int32 input_sample(void)) U: R. e, z4 s! I0 q2 p
{  % C3 K" N* _8 B/ S! L: i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 B7 _  d, v7 \) u. P  return (AIC31_data.uint);! j/ ]0 g$ D- d. F: x9 J2 d
}" k! u7 a4 h2 I4 k6 B' J
' |$ k& F7 C- O4 A  M2 l
分享到:  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-18 21:06 , Processed in 0.039509 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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