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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. X$ q2 s8 L. t$ xmain文件:
" M! B5 X$ Z& n( f# c0 Y# Ninterrupt void interrupt4(void)  
; U6 g6 R+ ]" {# L{
- ?- t& j+ |) o6 P/ O8 R# R  Uint32 sample;
) X/ L: g; `  M7 ~1 b+ z
7 ~- h, ^/ K, p( K1 N  sample = input_sample(); // read L + R samples from ADC
& o3 l. v! _8 c% j: X$ x1 u& E% H  output_sample(sample);   // write L + R samples to DAC " [. _- g& b+ x6 u, a
  return;
' s( \) p& c* ^( h}) K+ J2 n! U1 W4 ?3 n2 _
# |5 m) y; Q+ Q, F& {' B; m3 C
int main( void )8 e: Q( m5 Z  ?8 G) S
{) x/ W% J9 u( v

( S% s' ?& V# t- s) F- e* I) h% @    /* Initialize BSL */
7 p4 T0 d3 V$ T% V- F    EVMC6747_init( );
7 o) n' {; T! O! `3 b) Q" v: t        /* Call evmc6747_intr function */, \' G: A) _. h) Q; a% C1 k
    aic3106_init( );  ^# F& Z" o# k* g4 e
        while(1);
, T2 x' A2 H3 d/ D3 g) _}
1 _$ G) t. J3 h$ V4 y7 t. W
! W  W$ Z/ X* }5 R$ y9 O) N+ Z. n: x
. o- a& o0 L& N1 Q" y& _) ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 I6 [5 _1 h% O' f
/* Initialize MCASP1 */, l2 m" M5 p( R6 Y$ x" r' Q
    mcasp = &MCASP_MODULE_1;
$ {( H/ Z; U: C    mcasp->regs->GBLCTL  = 0;       // Reset5 Q! H2 G; ~! A. @/ q
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 w9 ~9 @+ n# a    mcasp->regs->XGBLCTL = 0;       // Reset TX
# }! R) E, h, r+ z- I( u0 [8 _    mcasp->regs->PWRDEMU = 1;       // Free-running1 i) n8 P% Y) x( l1 n# k
   // configure McASP0 receive registers
+ l5 O) |  ~( l( y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; u+ e! y( i8 ^- Y& h( l1 w4 j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 A, ~, ^9 H6 i9 A( a: U3 N: _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- C+ r$ H6 v% T3 m) k3 f
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 C' M% l$ T, Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 {) O7 s: v# n8 g* w6 D
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- w5 s0 d+ L+ B# ]
    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 t4 J" I4 {4 r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ @2 v, f# y+ P6 W; q# f8 T# f- T& [/ m' g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 X% X. U, O; V" m7 G/ s    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" W, ~5 n' x# c# m( b$ E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, q, {" Z# R! I' r6 t5 k! a
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# Z: T1 C5 \, F1 I6 A$ N! e4 A
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& i9 p& t3 o, D/ P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ ], j  H8 `- u. L3 \! `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! [9 j2 k) u9 L$ d* E% j6 M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. r. R$ e# k+ ?9 @1 @. N6 q) L: E9 {8 O$ ?7 i3 y" n0 I( `' y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( N- a* o; l) q9 F0 ~: m3 P* A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ J0 {7 z, L* d0 [7 S7 B3 _# A# r8 ?    mcasp->regs->PFUNC      = 0;          // All MCASPs& r& b% i$ K0 m$ @2 z# l. k, |8 }
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; q4 q4 U! N: l) ~. Q4 a9 h+ u9 H

+ s' ^( x4 W5 U8 s5 \    mcasp->regs->DITCTL     = 0x00000000; // Not used
- g. S  a1 q$ R7 K    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 I! V! V# @& `  ?3 B, J    mcasp->regs->AMUTE      = 0x00000000; // Not used* b: ~8 E5 b% U

6 i1 N* D' m% j7 _/* Starting sections of the McASP*/$ o6 j! z3 y. P$ J% I
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; o& `7 A! C- O4 Q# |0 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 U' [! {% H! _/ J' D4 l
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 c3 [6 ~4 N3 @9 I' a& ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 i5 _( u$ M* Q& o" R. B+ M  e' L

- ^2 Y" i5 H6 a. s. O* u; r    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' E) Y( d; r1 b5 R. x" f' ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. P* N' A) @! O
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 u2 ~( G, ?! U$ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ m$ s" o+ T" p5 J1 ]0 I; F

: _( D1 I( Z4 g  ?& G* t! H    mcasp->regs->XSTAT = 0x0000ffff;
9 N0 \. p' p3 A    mcasp->regs->RSTAT = 0x0000ffff;
' X  T3 B+ W& o! e# L
% |3 O4 e- c2 m, Y/ G! c+ c; O. D7 O    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 V2 ?' w5 y+ @  a* @" c* M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) t- M- _% U; [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + j5 ?, F" S7 }2 X- V- ^  A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% V, Y1 @! P) f; h. h6 t7 B& w: I6 ?5 s( G
    /* Write a 0, so that no underrun occurs after releasing the state machine */. ^3 `$ ~; S* x% H" i  V5 w9 @+ h9 Q1 p
    mcasp->regs->XBUF5 = 0;+ s2 T! q/ v; s, D
    mcasp->regs->RBUF0 = 0;. M3 J' J. c6 K$ r' M6 M9 d  X

# s4 h( D# t- q4 Z& }  M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, a% S% j0 s* h( b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( `) N' v  ?% d& h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( w. O( l! t  T, G1 f4 j# `5 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& d1 f! Y' t; J7 L8 i
! J6 }& v5 q4 \& j
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, }: V8 X3 v4 A# ~/ s" _' P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ \! R! r1 K) D3 l4 X. a7 a3 x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* m; b1 w  L+ M4 W+ v% _" _$ O$ e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 B4 g' q. s' D+ e  b6 m$ j
! J( ]- C! i& k8 r! e* m7 g* R
    CSR = 0x0000;
  t1 a8 m! O1 f+ `' |) s, J* b% ?    INTC_INTMUX1 = 0x3d;
1 q5 M0 x, P) y. y    ISTP = (unsigned int)vectors;) A3 [, m! f: F. r" l, A
    ICR = 0xFFF0;  
# U2 Y' P5 }) F6 C$ v5 w; ^6 l    IER |= 0x12;  6 |, ~: y, F8 E0 @" _* n- [8 R
    CSR |= 0x01;  
  Y$ p! o3 M+ h& V/ A9 d
) g' z, M& I1 p4 a
3 L4 B# i) m1 m! I5 f% ?# s- L7 q0 {9 Y% N* o7 e
还有就是两个输入输出函数:1 v1 c1 G. |4 L, N: H
void output_sample(Int32 out_data)  I. b' C2 B- `0 _. T# R9 o/ {# r
{
# J, H/ ]+ C5 R" V% M  AIC31_data.uint = out_data;  ( n7 T: D/ [8 _6 r9 }* R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 c+ I: r; ?: p( N
}
3 Z6 @& z* o* T
7 s2 k$ U! [' \' h8 vInt32 input_sample(void)
  `8 |. M" Q  F; y1 J3 X, K{  2 D% X8 H: L% |  Q" C1 w
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 P7 P8 _* W$ n8 J  return (AIC31_data.uint);8 h! e, f% R# ^8 \6 A# s, A
}1 \. @+ z( |# n" v4 E& u& C
9 G+ u: `# J% u3 Q- y  i. ]. X
分享到:  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-3-26 00:21 , Processed in 0.040586 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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