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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ }; E8 \  R; }
main文件:7 W  u  b& v+ H* m6 S6 k9 E+ S
interrupt void interrupt4(void)  9 `+ k" R+ M/ |; c. o2 F
{
. y+ Y; N" x) A8 W  Uint32 sample;
+ H8 [/ p) f  [- i+ f$ ^% @* |8 A: a
  sample = input_sample(); // read L + R samples from ADC
2 J) U9 {. w! s# r4 }2 i* ~  output_sample(sample);   // write L + R samples to DAC - d5 I* h1 Y! i/ w7 ?" f9 g
  return;
( W2 h/ T0 @' n1 C' o5 m}
$ p; x1 K# V  M3 H: E' l7 O  C
$ W/ E: i3 o2 w* p8 m; o! _! A- gint main( void )/ f/ ?1 _3 C" @/ W' I5 g
{
% a$ e. _" o- R2 [% x4 t9 e0 z; a6 {  e6 g& U& m
    /* Initialize BSL */
# c0 v; D- I& w3 N& l) b8 g    EVMC6747_init( );
1 [3 i+ R+ ]/ X6 ~: I+ m0 S        /* Call evmc6747_intr function */
: d' N' d' k) _    aic3106_init( );% _7 T7 B: p) ?3 t
        while(1);" T  I, q0 F3 H' r9 M( z* C. k
}
, I5 |7 z' G8 G( E% Z% O1 d% t) @) M- E' J% W4 L3 s. O
3 J) N2 s$ {3 k1 ?: ~; a' t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" d0 o, s: G1 f( A9 b/* Initialize MCASP1 */7 R  D9 z$ d4 ~# N, P. |# [9 G9 B
    mcasp = &MCASP_MODULE_1;
+ ]; W% k! {( L8 z  z9 X) t% a! E    mcasp->regs->GBLCTL  = 0;       // Reset
9 T3 E/ N; W1 A' r5 ?* N' x    mcasp->regs->RGBLCTL = 0;       // Reset RX( X' n5 ?, s0 r3 k" J
    mcasp->regs->XGBLCTL = 0;       // Reset TX% m2 D% p- k; E* F; u! P
    mcasp->regs->PWRDEMU = 1;       // Free-running
: S7 b( q1 ~- B( {   // configure McASP0 receive registers" Y' q: O7 t5 g: C
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. ]( i+ y8 j# `& F) ?+ g
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: ~  T2 ^& C" e  ~- Z7 x
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 g& P2 l3 D, \7 k! @' L/ ^    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 k7 ~/ A( C7 ^    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). t/ a9 s5 r! n# }, Y4 V/ Z! r4 d
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 Z1 G# Y* U6 L9 t) r6 W; a
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! \( ]+ }8 Q( b6 U3 U    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 z1 |( {6 c* T! u. m
0 v! @# Z/ p0 _9 y5 s/ U- f
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" j( |# p9 O$ e. M+ G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& T" c' G, n: v6 m5 S  ]# F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. N& t" h6 X; o6 h/ V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! k4 ^% ]; x6 O' O
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' V8 ]- [5 ^& O: |6 l6 f! z( B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; H: B4 |' w' C" ^/ ?* s    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; f( ~; [6 P( A8 [. R# R$ ]% G% N
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, F, \7 p% i) E1 u+ h0 l
$ F  ?2 K& ^7 ^! s9 |1 B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% b  O3 I# y# A, W/ k9 |; {0 A% i/ ]
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( q/ \& `! R. F: z9 o8 ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs% X" ~9 u+ S0 m! D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ s+ b: p$ y$ D$ i! m1 m: h( g
3 G5 T" j. C, w4 y+ Z
    mcasp->regs->DITCTL     = 0x00000000; // Not used; e$ Z. H/ J" ?; q5 F
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: ?1 D/ f% A6 F5 L    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 F+ p. K* i3 M$ a! t, s- ~
" `" ]: W8 E1 _7 _1 N* q/* Starting sections of the McASP*/3 O9 M. I% Y2 g$ r& u( m) M
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' k7 L8 t; j! C0 s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
% j+ N) @, M1 x1 t% v! U9 B  _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " l3 s$ a' m; z7 [. K/ G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, R# d" M8 C! @% ?  x4 d5 D8 Y" c5 Q2 m8 J, R8 V. o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , w% s1 }! ^0 ]0 T% N6 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 C. F  O0 G$ C8 I
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 X% Q' a* j" \! N) T. W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ @! m# U: e( [. P( f
% [+ {1 g  y% t    mcasp->regs->XSTAT = 0x0000ffff;
  |; p, m, t# B% @  Z    mcasp->regs->RSTAT = 0x0000ffff;
5 q+ w. w1 D' g/ e/ K, F% A: ?( q+ e* W$ M
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 e$ _; k0 B8 h+ F' v7 ~6 J, q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; T# J- ^9 A+ q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 l0 O( d9 X% B/ K' b1 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ w+ \& ^. Y# y0 d1 p* D

, {6 m* j7 X4 n' X$ T% Y    /* Write a 0, so that no underrun occurs after releasing the state machine */, N+ c8 S( ?) _) H
    mcasp->regs->XBUF5 = 0;
2 i9 c- i1 J/ B    mcasp->regs->RBUF0 = 0;3 k- h1 z) u7 r0 A* T5 s

8 k6 _. p+ a" d/ Z; F9 O$ B, Y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ Y9 j/ d, y" S" z7 ^' }- {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 L: T/ t4 `) w    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / u9 F3 E# y; n0 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ @+ W* |/ ^" g7 F0 k" e5 b7 T/ Q6 y( m; @5 f5 X* F$ a  V4 C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 C9 A, U3 O4 {/ a; P& }9 Q* A! p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 b' n: e) l1 W& `( @  X6 \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& T2 p8 F4 Y, f7 T) j( V% D) d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) Z' A: q- B* ~- w
; R. b3 Y& u' b2 x1 H4 h
    CSR = 0x0000;
5 h- k  H; L; z/ @. d    INTC_INTMUX1 = 0x3d;# I& e0 W' `/ H8 S% U, y
    ISTP = (unsigned int)vectors;& |# T! {) A7 I% j: _
    ICR = 0xFFF0;  % r- n0 g, ]; Q
    IER |= 0x12;  
$ ?  u6 ~" ^2 t& W    CSR |= 0x01;  5 C0 B) D, ^. o: L, [

/ X4 A3 e9 Z8 V) O" A2 d$ E
) b( D( @1 D2 M1 U: H2 m* @6 ?" _+ ~) g- G. b# }  ^5 t# m
还有就是两个输入输出函数:
; o+ h8 U; A3 Y$ C+ Ovoid output_sample(Int32 out_data)4 J2 B" c) S/ Q5 B! j2 e0 Q) k7 O
{! t5 `& ^# S4 v
  AIC31_data.uint = out_data;  
) u9 ~. U7 K+ ^  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; v$ Q& E* T* }4 L0 X}+ ?; t8 @$ ?4 I/ T0 |

. B. k/ C( J$ o8 tInt32 input_sample(void)- G# N% F* l3 A$ B/ m7 p, @
{  4 ~" y1 n/ G- s4 K. X
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& w  u* W, x) |. @  return (AIC31_data.uint);1 V: |: D; N( A* j2 j3 }5 b( S9 p
}! j: J  S+ T6 \. b- `
+ |& c8 ]! e/ g
分享到:  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-10 15:17 , Processed in 0.039236 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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