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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* S+ N; S2 g% {/ D+ ~
main文件:7 p$ V5 t& ?$ f
interrupt void interrupt4(void)    T% f" o" e+ g, S
{
9 k+ @# m, D  T7 W. E% s/ p/ z  Uint32 sample;  \7 ?% M  e' f3 }

( i; ^) P# Z; u3 \4 p$ |  sample = input_sample(); // read L + R samples from ADC
8 [% R3 Z) P- s  output_sample(sample);   // write L + R samples to DAC
2 i! r. x9 ]2 D6 t8 R( @  return;
6 M2 v/ v+ q7 M3 R6 x! ^1 u+ Y: S}
' [% [1 e0 f4 _5 Y( Q! |* a
1 [$ S' \4 [5 xint main( void ), E6 T9 A+ `# Q- Z( `; p# a) q6 m+ p. h
{
" t3 Q* a8 ?$ |( u; O, N  p! ^8 n  V* v' I, r5 s7 f; m( P7 H, x1 r% u' e: t
    /* Initialize BSL */
% {7 _; o- A0 D3 R- w    EVMC6747_init( );) s) }: T! R; ?( i4 W' \  L2 _  x. q
        /* Call evmc6747_intr function */
1 i1 v3 R/ t* _; l+ ]" Q) n    aic3106_init( );
; {0 I( z* ]3 K3 D2 R        while(1);
5 ?, [, A6 _  ?  g0 I1 X+ q8 q7 e) V}
$ y1 R* z5 R7 n
" i  n% Q8 \2 r4 E5 m" v3 X) W$ A. d+ z+ Y! e% K/ Y; G
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 n8 C- T* n7 ]8 A( p7 }
/* Initialize MCASP1 */
2 O2 F# K( Q% j7 o- I8 h0 D: x    mcasp = &MCASP_MODULE_1;
, p; e5 Q2 V: @; F! S7 P0 t    mcasp->regs->GBLCTL  = 0;       // Reset% I1 f) d! D) m% y8 @
    mcasp->regs->RGBLCTL = 0;       // Reset RX( _4 |. J0 ?2 L1 p! S
    mcasp->regs->XGBLCTL = 0;       // Reset TX+ V) ]5 u3 o5 p7 A6 u
    mcasp->regs->PWRDEMU = 1;       // Free-running
% f* B% A; j( w' P% Z' ~; Q   // configure McASP0 receive registers  m$ g! G( i& `) ~  j* Y0 U# O" z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ g  Y" J1 o# x+ C! E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. `& ~9 U4 T/ \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( i) D% }* F# ^4 m
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 r4 {! m3 k' W0 g: C, d    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! Z" E; g0 ?( u( C7 F
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! o; S6 l! `/ c7 _+ D! M
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' Q  L2 M" T, e
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 P- F! ^' j! p( s6 }' b0 u5 y: o  w
1 D0 p( j, N+ u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 L* T% D( g( V    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 [8 ?  c. i2 y: I1 f/ L* ]! j# a7 P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: K% T% k0 @2 o: `) g( f0 C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! C/ [6 r8 i' z( R( _/ P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- I8 f5 E: [/ M& L/ d9 w8 u
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 a, G! c  F% K; U
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% g" p1 N  d* g0 f; Y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- x9 F8 o1 y' P! \5 h( t, ~( R9 b
0 M" x$ q* _/ P( X" z# I% Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 g* J3 {, p1 B6 N1 i
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 w7 B# X7 w: l4 ?    mcasp->regs->PFUNC      = 0;          // All MCASPs) y% i! `; g/ @. Q0 K; w5 L
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ Z, v: w& a4 J5 k
2 a0 V8 d% e6 u# a9 H. @3 C
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ d+ Q, o  y: N1 B! W! X0 k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ m+ q/ \. |7 c( K3 u    mcasp->regs->AMUTE      = 0x00000000; // Not used
) X% Y: h% m- ?! _9 O
4 V# P; \# U$ L# @0 w/* Starting sections of the McASP*/! P& M1 m) d0 V1 n! x* C. Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) k/ |, x2 j  u" x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' ~' ?* ]" C' V; v
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 y* T9 `2 r2 q( i- v: C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 O" ?* Y5 W4 \  d- w( O8 Q
! s3 ^2 J0 L( \" F- D* P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 ?& k' ^4 L/ w- V" y0 @/ F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 V5 [8 l$ o" |; l: Z  j, R) n; @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* U. y8 u% _4 K2 d" d, I5 P# h  ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 v( A4 V# e! M  i2 t& j  d
) q  V$ V. G3 ?' T( ?( i5 |4 J; R
    mcasp->regs->XSTAT = 0x0000ffff; 3 E4 j  s: H/ e& m# e; g- L
    mcasp->regs->RSTAT = 0x0000ffff; ) q) k1 J9 L& d6 J+ A5 `2 V
& f# C# |* \2 j  l  S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! `6 {1 t4 B3 ]# V3 `) v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, b$ e! h0 ~+ t/ l" F: c
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 `/ Y: V6 C3 O$ n9 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# n" Q( o/ w5 ]3 l/ `# C$ E$ r; O8 k. A, C
    /* Write a 0, so that no underrun occurs after releasing the state machine */
& z' v( c5 ]/ m8 v% m9 c    mcasp->regs->XBUF5 = 0;
" Y9 u% s0 L1 ~  H$ b: e( R    mcasp->regs->RBUF0 = 0;
: k6 r2 r  ^& \1 G
' s0 s' e; y+ w; W0 s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 b  i; {! e: v. g" a1 p. e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; A7 n" |5 O0 [, Z. ~    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% C, N" ?+ q$ Z8 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! }; `! o0 e. \* I& ~

, m% Y$ E* I" ^: M) c* [# m    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 c$ k1 ^5 x  n$ v1 w) f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- O9 m9 c0 C2 x$ l    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 |. u) a! S. J4 f( r" l# O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ P! l8 }4 p/ ~% P/ K
* B" L9 [' L, G- c3 a, W9 O- _" e    CSR = 0x0000;/ ?9 R' D7 n# b# j: Q
    INTC_INTMUX1 = 0x3d;
; G( F7 U  J+ z1 u, _2 x7 E$ N    ISTP = (unsigned int)vectors;
$ ?8 l( A/ K9 m( z; R! C* f6 N$ m, r    ICR = 0xFFF0;    i, _2 f7 d, v' l* E+ v4 N2 {
    IER |= 0x12;  
2 _3 ^6 }$ U" L$ F% V  A& U* U    CSR |= 0x01;  , E7 T# k1 v6 v' \! m2 z' M. w  c
8 Z' C" X2 Q" s3 M' K2 ?

- C% u- h7 e" t' ^) }( h6 c( i& e! B" [  `# P4 n
还有就是两个输入输出函数:
7 C+ V5 _5 h+ M1 Mvoid output_sample(Int32 out_data)
9 H! }7 G3 I  d! n- b{& r' M; ]7 v) @( p
  AIC31_data.uint = out_data;  
2 ~9 l6 o/ y' d  Y( a; r  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 z7 @% q6 a; _+ f$ h, L  W}
8 G6 ?* h- f6 y* c* Z( O- u' q) {
# d# L+ i# E6 q% c. ]1 ~Int32 input_sample(void)
  p2 x( O' H  Y. r% p4 K: v3 k% w{  - C  [4 l* E& U  [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;  _. c) h8 D, w5 Z3 y& V' b
  return (AIC31_data.uint);3 g: a0 x, x1 C2 r
}
7 A; U% v# t/ H% S
- O' w7 X4 z" q( M
分享到:  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-9 16:37 , Processed in 0.041436 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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