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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; q4 @1 o! d& d+ ?main文件:
9 J! t5 G& s8 v7 d: W6 Q- ]* M9 qinterrupt void interrupt4(void)  " Q% o$ b* s" a- ~: A3 X( {
{" m; {9 t, B0 o, C7 @
  Uint32 sample;6 P+ ]/ ]3 a; c( k
6 f9 ?* O8 o& X1 H: Y. Y% R+ j
  sample = input_sample(); // read L + R samples from ADC
! \1 ^! V; ]2 K6 U0 n9 \" d$ w3 m  output_sample(sample);   // write L + R samples to DAC
* V& {$ H0 W8 [4 u6 ]# K9 d  return;& j6 E5 D' H% O* f& z
}
2 T3 ?9 \4 v9 w; ~. g- }  k& n4 f! y
int main( void )) E2 x0 w" D2 h. L# F! J  ~
{% F* m" y& g! T6 J, `2 O# C, y! |

% O" K/ a, ~8 T: x& ^# p    /* Initialize BSL */
0 n( `2 ^9 q/ p9 M8 i7 }    EVMC6747_init( );, _: M6 S7 S! `3 _& j
        /* Call evmc6747_intr function */) }2 N0 x0 I/ ~+ J. @
    aic3106_init( );9 v6 [: Y$ g: A2 ~
        while(1);
. F8 E- V6 @/ _: F}" W' @. U% H) c( Q. J( d

- D5 s1 u8 |& N& Z0 q2 x
. k1 n- Z# R% ?* [1 M- E8 \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 S$ E5 r0 g' G; c, M
/* Initialize MCASP1 */
4 Y8 |' z  R8 P% l    mcasp = &MCASP_MODULE_1;& f& |- n( J+ q; s3 N- a
    mcasp->regs->GBLCTL  = 0;       // Reset
$ o, D4 `1 L. i1 \& L# g    mcasp->regs->RGBLCTL = 0;       // Reset RX( M8 n6 k$ y, J( p
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 l. ]4 \1 O4 Z( o    mcasp->regs->PWRDEMU = 1;       // Free-running8 _3 [7 |* ~% N( Y. q* e
   // configure McASP0 receive registers
" p, @" J0 j1 M; y4 Y2 Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ H* |) l5 d6 r( u
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 _% c2 j6 Q% o$ q. X  O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* y4 i8 Z  ^: \3 t* v8 W9 L' G& W0 u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" a1 h, m( n: Y4 D
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 j7 R! @( U! Z) q" h( }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# O) b$ |. F  ~) s8 L( N" Z; v, V7 [+ j% j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( m8 B2 X4 B. K) t; D: g    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 x# r4 g$ n* S8 X4 L7 H- w5 s4 w1 c6 O4 ]1 q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 `2 `. @9 s% b, H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, U# h7 v: [" e' o5 w" N5 ]; P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ }- s0 {0 X2 Z2 L
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  J  S) D! N% t1 O+ D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) ^' {% x) y& N) ]) H    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. @3 c7 N( m: B1 _$ S) q) p0 B. ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, E2 p* K2 C0 ?
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 C/ b0 U  s: Q" {; S2 s6 C

, _# X4 Y) |/ o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' Z! c3 ]3 l; y9 K( S$ x  I  x
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% w2 d$ p. r. L    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 B$ ~- D, X6 |+ e    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, H" K2 S( q5 a2 s7 N; ~$ n) |
! [& S. E' _0 L% L1 n8 g
    mcasp->regs->DITCTL     = 0x00000000; // Not used- J) z2 Q" m0 j& y# K) X
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& r. @% b3 I2 p# H  M) G5 m
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 A6 w  o8 {  E. n

* p9 t1 O: b$ k/ \: E# t. X/* Starting sections of the McASP*/% Y& F3 y7 X4 P! n& B" A
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 K0 i. ^6 T+ J* q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! {5 \2 X& S/ G6 e1 c6 Q* W. m
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 W9 \2 |/ \: S! R$ H1 R2 ^: E' P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* H" c! Y# o: c* m$ J
' _8 W% H+ v: y1 c" H) Z2 e3 {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ W5 Y* U( B% H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 z) e: f2 ^9 l2 t) o0 d" L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 U3 l4 Q# d' C6 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 F( p; [/ X* q" X" s) u

! R4 r& L: C5 j7 b+ _6 h6 U    mcasp->regs->XSTAT = 0x0000ffff;
- m. u2 }3 \# R% C9 n( N    mcasp->regs->RSTAT = 0x0000ffff;
; S3 ^3 d6 T2 k0 g, J, \' U8 z1 E) Q! v3 f) K) Y6 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 D- v$ x% a; ~3 P% k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) u8 @2 b3 o( `* Q5 ?    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : e  s5 B: x! j1 m' L# P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* ]8 M) D& x4 ]! q* j, z' K* {$ Q* Q5 }' N2 r6 |
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ w! c. [# ^. H4 c    mcasp->regs->XBUF5 = 0;
/ q- E' V9 U6 [    mcasp->regs->RBUF0 = 0;
/ c2 [2 n9 m" }' s1 Z: E; R: [5 q
  }3 Y6 W3 T9 p' G  |7 @+ [9 W    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ \! Z* a* u- o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ G2 j) y. ~4 D. `/ q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 _1 H, s9 K: I; p& y. X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( g2 [5 W" @0 H! n! s
0 a7 M0 x9 d& R. ?5 e% y4 \- i0 K- O' M    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" o# @3 G3 D% c$ a  |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% c# D/ i6 v/ j% g: q5 i  W. C7 T    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 O( Q6 Z" P8 K; E/ w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! Q. n% D8 _# j( {$ Q) v3 b9 H/ g% ], K7 d  d# d
    CSR = 0x0000;
! ?; I& T9 y/ n! d    INTC_INTMUX1 = 0x3d;# A$ p) ^. Z* o& g
    ISTP = (unsigned int)vectors;' Y( {: _2 V% ]( v4 Q% t
    ICR = 0xFFF0;  
' }" c  i1 K) I% Q" x    IER |= 0x12;  
. a/ h7 e2 e# `) q3 |4 Y    CSR |= 0x01;  * n$ A( [& v, n) y3 [; E3 W8 o

! W) V1 r+ k. y. i) S* e* c
' e1 a. b7 x3 J* B7 i0 M4 Z; u+ K2 H& c! z0 w( p6 R
还有就是两个输入输出函数:8 j1 N2 w2 c0 z) V
void output_sample(Int32 out_data)
* W7 Z) b* A' |* U/ j4 [{% a$ \) [4 N) e) g( t
  AIC31_data.uint = out_data;  
7 ]. T! s% u3 e. a% n3 u  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ I. L* p" _5 E' K$ i
}! V4 u) i! c) a. k9 z

/ I& I- t5 }! A# O  qInt32 input_sample(void); P7 _# O) Q9 Q
{  
4 E* t! E( x8 X, `3 y- b  AIC31_data.uint = MCASP1_RBUF0_32BIT;: ~; N. u, H( G- N" I' [
  return (AIC31_data.uint);# E0 W- ]7 W7 d5 f
}2 M+ f: ]2 ?% X1 D8 W$ q6 e% ?! }: `

8 L' n6 o5 N8 {# 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, 2025-11-6 04:21 , Processed in 0.041045 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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