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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 U0 H+ a9 w2 b  o* {
main文件:
& v  y0 F+ ]( E# H% c+ q7 Sinterrupt void interrupt4(void)  
0 I/ M9 R5 Q8 Z8 s7 M{1 E. g% {9 K# r) D9 w! B' q3 ^5 E
  Uint32 sample;' v+ b! I0 F: Z! @9 M2 |6 ~; u9 B% b

6 l# H& l! p/ W7 W- m3 s* U9 l; [  sample = input_sample(); // read L + R samples from ADC1 t5 E. b0 k. z# s* Y: s
  output_sample(sample);   // write L + R samples to DAC
3 Z! }% [7 j9 w  b, M- T$ t  return;% U2 O8 }! j3 [) }; Y
}# w5 ?0 r8 L* B, K! O7 O
) c5 t6 _& x% g3 q: |8 v
int main( void )
8 U3 Q0 k0 e* A, B+ u( I0 ^{1 _& t: x- Q  o4 G( n6 B3 ]6 m  ?

2 ]7 M7 V6 s, @. n2 q( d, H    /* Initialize BSL */
$ s+ C; }+ p1 S% l" M    EVMC6747_init( );
- o3 @, H/ i7 Z8 J' B0 y6 O! o$ D        /* Call evmc6747_intr function */0 A  \. b+ a# e
    aic3106_init( );* M3 ~: h  b/ r7 T2 q
        while(1);% U% }( C3 a5 ^0 \% h" R( S
}( h% U" g8 Q3 L' H; Q# {* f
+ x2 r! Z! N! O7 h9 z; l

, N/ w1 k* ]  J3 T. L" R2 l; }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) J" H# }2 O( v  u/* Initialize MCASP1 */( B& s: U$ {1 n1 [
    mcasp = &MCASP_MODULE_1;
7 G4 L2 x5 J/ r- Y9 c3 W7 u/ O    mcasp->regs->GBLCTL  = 0;       // Reset
. g/ D7 G' p$ D1 d    mcasp->regs->RGBLCTL = 0;       // Reset RX
% Z/ d2 G1 a9 P9 q2 r* Z: Z, }    mcasp->regs->XGBLCTL = 0;       // Reset TX8 t1 D; o* b% |" r( v& c. j- p0 ?- J
    mcasp->regs->PWRDEMU = 1;       // Free-running
) R' d$ B# o$ e8 E' s   // configure McASP0 receive registers# I+ K& _- E1 ~7 h* @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 D, @3 |# z5 V! d  W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, {; U# l; t# O7 Z8 T    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 o! x, _- q: ?/ ~' o2 d; J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 k0 ]9 Y. K4 W9 B& ], v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ _' |5 y- ?9 q- e% u
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: u% g: `7 S8 s$ P+ d* R) M6 T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( y: }" g$ {- k0 e! g9 u5 ?
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! e" G9 A2 j0 E! b$ ]4 X5 j

6 u/ c" V7 ?! J* {! E    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. _' O0 L, j6 ~5 I: i0 A2 Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* @/ {1 J* ]- O' q; }. w
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& o: s' H* g0 v, y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: i! X# F; m+ h% C9 o- p6 L& ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. J6 D" |) a' A# x
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, O! j" l$ H! F. W$ a. Z: C! a1 E
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ T: F0 b4 l! X0 |( c
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 x' X2 K6 D  r2 `

  S6 J9 ]# L* s* v% P# u) G& ]8 Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! P5 n1 D: m% c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ q+ k2 m. K& x+ O' i6 y! k    mcasp->regs->PFUNC      = 0;          // All MCASPs2 J, O- \/ h' D/ i6 x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 D5 G8 u  S' {8 i. r/ m1 A
: l: H( S3 X) r  T# N/ r, j- X" [
    mcasp->regs->DITCTL     = 0x00000000; // Not used9 T% G, T1 X& w' {) x6 u& I3 H" I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used- E/ K7 R2 F; ^" o/ X" D
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 A* Y6 E7 }- \8 C1 @# b+ B
% c' {  L! d6 ]5 D6 h- z# W
/* Starting sections of the McASP*/
) i( ]" ]  t! y! R    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. u& j8 U7 v7 h* V2 s, S) t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 P/ K8 @$ I! Q3 n0 s/ h4 f
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( N2 C6 G* S* R+ p$ m& a- Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ B3 X& J: A2 N5 S2 M; a, X  o& h" L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 I+ K$ w( l5 a4 f; r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  b6 K- G7 i  r% G! t, S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . `$ ~3 c$ W: t$ [  m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 a2 K8 ^4 F- v7 x+ A8 R" J. u( J2 a/ U4 v
    mcasp->regs->XSTAT = 0x0000ffff;
/ a" F( B, S1 z    mcasp->regs->RSTAT = 0x0000ffff; 5 Q7 E# Q0 O7 u
- V" m2 _' h9 O2 v8 \3 ]1 I
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 `0 `- w$ T! W  z- R( h! Q2 E3 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 y; C( \( b! h# {! e
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: ?9 p' \3 L& p6 O( x1 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ l: @( N7 [* S4 H
, Y2 t4 a# Y2 F7 |! T
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. o" W3 ]9 F/ Q- g" B7 R# r. y    mcasp->regs->XBUF5 = 0;! W4 c% }  E' g" i% z$ _
    mcasp->regs->RBUF0 = 0;8 E+ p) ?: u3 p/ }8 a0 \1 C
% |" [) L" r% r0 {# |6 n% G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 A  `) N* w2 N$ }% `+ R) q4 u  u' v9 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, r7 a# O! p5 |6 y. W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  e5 `2 f* l6 I: y& @" e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 N( i- H4 B3 s( z* ]4 D4 c- m+ q% C6 p
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " w5 z& i" u+ H( y! z% h# \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( C2 X1 Q; n: ]+ _6 n# L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. p2 |( F2 ]2 R  j5 `& w- w3 `8 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* g4 }; q! M% z" \

6 d( I: ^0 d# b8 S7 b" c- C    CSR = 0x0000;: [" S+ c2 b+ Q! [+ s& `) Z- L
    INTC_INTMUX1 = 0x3d;
* p  p  F: U; ]; R, v8 p: F    ISTP = (unsigned int)vectors;
2 \5 D: c* ~2 c( ^1 t    ICR = 0xFFF0;  ! n7 C1 ~7 U4 y2 a0 Y
    IER |= 0x12;  " L# S9 e# d, m" U8 H3 P) f
    CSR |= 0x01;  
' n" |2 Z# I: J( W1 A% a/ k0 m$ a% s7 j
, L! F4 a$ W) u. R

# Z# g+ O4 {( B还有就是两个输入输出函数:' q9 y- F8 G" |: z) z2 O
void output_sample(Int32 out_data)
  p9 Y1 p4 j4 G0 b{
0 t7 ^5 U. \7 K& ]9 t! V  AIC31_data.uint = out_data;  
2 y; w6 }7 t' u* \  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) ?; a) `/ {9 _$ w}
4 X7 C' u' I! J5 _
; e7 T" X: i5 ?( Z7 B7 RInt32 input_sample(void); \1 r/ x7 F. R, U) @2 r
{  
6 L) l$ m, D) H, ^' o3 W4 a  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 r9 {; P  @  ^# ^& I
  return (AIC31_data.uint);
- }4 k; H& y) C( v& s}
. m' M# K- D, Q* {9 A$ @, J& B5 {
分享到:  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-11 22:00 , Processed in 0.041835 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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