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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' g  D3 C6 ]5 @7 v7 h: J; B1 V$ W
main文件:. H7 Q; c& J0 ^8 h
interrupt void interrupt4(void)  
6 j2 U8 E8 g! [{
& N! g5 T& a  e1 u( }  Uint32 sample;5 w! V' N3 c0 _7 R" i

4 H4 _3 l2 O5 f3 F  sample = input_sample(); // read L + R samples from ADC
7 l$ j# z) n  |& t+ N$ Q6 _! z2 \  output_sample(sample);   // write L + R samples to DAC
% `4 w8 n1 K% o( H7 v5 T  return;( F3 t' [! z$ f2 j0 s) U1 A
}: d; t0 F0 A5 t; N( U3 _: F
6 e% q( l2 f" V& r
int main( void )
& h5 l! h% ^/ s+ L{3 |4 A6 S' }' B: }7 ^

" Q( h+ g. B$ p    /* Initialize BSL */9 x$ C) R$ R* M% _
    EVMC6747_init( );# i( X0 Y8 C9 q3 T. K2 n, `5 ?
        /* Call evmc6747_intr function */
7 `/ X' P4 n$ z9 b0 z    aic3106_init( );8 A3 S, Q* A4 X
        while(1);0 ^( a, C, L3 W3 F! x4 q, z
}6 p4 F& j9 x* K* }3 R

2 Y( p0 C9 n  Q' P
# D- N6 `7 D( S& r$ `6 {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: r, n" H5 F7 G/ e/ t/* Initialize MCASP1 */
2 [) h5 f) G; s8 q4 V    mcasp = &MCASP_MODULE_1;
5 Q" X4 ?) ~+ e% g    mcasp->regs->GBLCTL  = 0;       // Reset
/ x% Y! B5 H! h( i5 \    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 S3 L9 M& d/ P    mcasp->regs->XGBLCTL = 0;       // Reset TX) K+ s& g. X+ G/ b8 H
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 a2 o1 I$ O8 O, V# f1 j; r   // configure McASP0 receive registers* p1 D/ ?( h  `4 g. @0 ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 `1 l3 P1 y8 A4 x6 o+ l    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& b2 R) J: @1 \$ {9 w7 m! Z. v9 i1 @; P    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 B) _( ?" O& R; Y+ ^2 e0 y. @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- g5 P& ?: F3 V% i. t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* B2 `1 c3 K5 c' |- c' s  i" `, B    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 t5 j5 D, z. ^* I: V4 @    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 p. F; m- E8 [    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% Q3 I* c: Q8 u# t6 N2 u( `! |% a3 l% _! t1 _
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# b( h8 x( G9 f3 f' z/ u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ T5 K# }& f- R) j5 f* L/ V
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' [" [) N8 C' Y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# L  `$ ^- M6 Z4 d; _- |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ d5 ~* N5 @6 z4 z' A6 L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 w% P1 d* U8 R2 s* Z1 @
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 l2 h3 G) _% D0 y: [9 Z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! Y/ H/ i4 a! [& E. a

* p, V* ~  u: N2 E; g    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 F. j4 p# ]( h9 C& S$ d3 e
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! P7 C, \0 y# ?! B; I. D, k
    mcasp->regs->PFUNC      = 0;          // All MCASPs# }" O. A7 c6 E+ h; A* p
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 b2 W6 N0 W( R+ `8 n+ ]2 i% z' a/ t/ Q, L) _  N) H! j
    mcasp->regs->DITCTL     = 0x00000000; // Not used7 R8 C3 C, G! B4 b' G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used- @: M5 B8 P+ m3 {9 U2 h4 y
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 ?+ F; M) x5 s$ C& t/ E7 K5 n
  t6 T$ ^! ~  m& L" I2 n/* Starting sections of the McASP*/
' ?" K! p/ g: k$ h1 [; n. X    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : `/ ~7 o9 Y. o5 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( q( H6 w# M. J! v' i2 d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - y/ p  e7 n9 A# G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( ?% b& g4 J. A2 H/ j  P
2 F. U' `3 t4 F; {% z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: ]! X( e  |0 |( s' ^- r4 e! A+ @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 L: A* D4 @3 g+ y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - W3 k9 K# d2 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; K3 r7 n; y6 ?9 ]5 p  B: U' \/ o, p2 ]/ S2 s* T) Q
    mcasp->regs->XSTAT = 0x0000ffff; " N. q: w/ L7 }7 u0 I
    mcasp->regs->RSTAT = 0x0000ffff; 2 s+ F% r2 [" Z* z% j" D2 e
! ^# M7 v; y3 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 ^5 |' u- |/ e5 ]4 a; V6 ]  Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 W* o8 i2 [  [' f/ `1 Y+ d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 y2 X  P2 ]/ B' i, G% P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 @. `, n# {: S
: X% o7 h, V/ b! a: c    /* Write a 0, so that no underrun occurs after releasing the state machine */5 r& T8 j0 P  T2 s
    mcasp->regs->XBUF5 = 0;
' m7 k! o* T, U* [! f7 J    mcasp->regs->RBUF0 = 0;+ w" R7 R# z8 [; V" @5 \

+ _9 A  v7 h4 c3 L  F/ t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   d6 G1 v$ v+ `! `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  [' X* a: f0 `$ d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % S! Q- ?& r" K' u: D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& H& b5 z) {5 v- ~$ J/ ]* r7 ^! R6 a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : E1 m$ ?+ j5 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 h3 B; c9 u0 z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# D- x1 @9 \1 x0 h- u, k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 q/ a4 l; N0 ~6 f' c! W* o( u
9 x9 A( l6 X1 S, _5 [
    CSR = 0x0000;1 e) K# z( R& G" A
    INTC_INTMUX1 = 0x3d;
, m/ e9 o9 M2 v/ I  l+ A+ }    ISTP = (unsigned int)vectors;
. j. h$ `  Q7 A    ICR = 0xFFF0;  * w; S1 i3 l3 j; K, N7 y
    IER |= 0x12;  2 H- ~0 H) `. |
    CSR |= 0x01;  
) D9 i- o7 W( K" A& m2 ~$ L, x* p* [- T9 b$ u& l& V
0 \$ D$ z8 `, P! V

1 t+ \; Y& K  n- V' {$ }/ \6 e还有就是两个输入输出函数:
+ E+ _3 J( G0 yvoid output_sample(Int32 out_data)( ?: `7 j4 i! B$ X; l: R3 ?) y& g
{
2 Q) o& p! X& N# g  A, a0 H9 A  AIC31_data.uint = out_data;    R/ K) N+ U% b' X
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- N; K4 m1 i- R* b}( F  ]9 v6 ^$ I0 a! X6 p
- F! |$ {7 T3 V" e8 F7 r
Int32 input_sample(void)
& ^- t: a9 G( g7 E{  3 t; u! [  F% Z% u' y; h' @
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 @) F/ S0 ~) y' I. A  return (AIC31_data.uint);9 ~8 [& e* Q8 _4 J
}( m4 p& t; B2 G) r  [# {; l6 _: |
8 E2 r+ a# T( J8 _
分享到:  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-1-12 10:45 , Processed in 0.044057 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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