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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! u% B8 ?; Z- o! _( D% D! f3 X, ?
main文件:
. r8 a) Z% A6 _9 H6 ?- Hinterrupt void interrupt4(void)  
3 j2 q7 ]- H, r2 k5 D! i{$ r. X6 [; p9 k/ e
  Uint32 sample;
' \6 V+ W/ y# Y* U, K* J* p$ {" e2 a2 r# I: I/ R# u2 C. g+ c
  sample = input_sample(); // read L + R samples from ADC
0 ?/ m( d/ z, y3 E* k  output_sample(sample);   // write L + R samples to DAC
7 o! Q- z0 o' ], F9 \0 _& t  return;
/ t  {( K% S& ]0 }/ S}
& T" `7 V9 T$ t* ?% N( M
# _% e$ s- F/ K' v( T7 ~+ t) _2 wint main( void )
2 A2 ]7 _$ k: }0 d  z{' F2 [; i  H+ x+ E1 V# k
, i$ t7 B3 B' d! _9 I/ F
    /* Initialize BSL */: w8 C3 R/ I' N5 B
    EVMC6747_init( );: {$ n9 L* C( t
        /* Call evmc6747_intr function */
( u4 Q. l" ]% i  E    aic3106_init( );
. ~- ~" ?' o& ~- p5 N1 ^        while(1);* V! \3 s+ S* e& s
}5 t" z" h' R' L/ @9 _. [$ K  o
5 s" e. {' l- z' e
" `/ |! r" Z2 i* X8 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ U; {5 g' u: q) Z  Z/* Initialize MCASP1 */
% l4 X: e5 n6 I1 S' O    mcasp = &MCASP_MODULE_1;% W0 p0 y+ s8 a4 N+ m& c
    mcasp->regs->GBLCTL  = 0;       // Reset
: i2 l1 X3 ~7 s* M0 p- @5 b% X    mcasp->regs->RGBLCTL = 0;       // Reset RX( V+ s7 P1 W$ W" h2 p/ J+ \( \
    mcasp->regs->XGBLCTL = 0;       // Reset TX3 g# ?, M" X% X( n' z8 n; E
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 F" c; M- H5 |" W+ j3 A   // configure McASP0 receive registers$ D& J& K* q$ g5 p% C' s" y, `
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) j9 |4 Z" h" k, @
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! c  N0 _0 }: G' x6 Y3 W$ _. o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# x, D  g0 @/ \. g3 L
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! ~: h: {' |, n+ {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. h! Y; P6 g$ m1 r9 |5 g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 w. S4 v3 v$ d" ?
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 U& I$ i" {: q( M  |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" }$ B  k- s+ ?8 Z  e

" S' K) I  K& N/ z: n$ K5 U    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: S/ W- T  r  W! l) E    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ Y6 S  P% R* g8 f( p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  c& i5 k& U+ K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ J# S. S+ {/ m; T# M. f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ ^- w, e3 K: ?- x/ D: e4 N' u
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( [) T( G) _/ s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: g" v4 i. v( F3 {- k# u, U
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! K3 h; m9 X& @3 O; G

# v5 Q+ c, m  O) n' k, h- p    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 Z! o" a9 G% I' _+ B5 ]7 }' f2 u  A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ m+ e, c1 A8 [1 F8 o; A
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 F6 B5 @  a. F; }    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' d& d5 U: H0 P, l' `, z% Z1 _
" x" h1 _1 u9 t1 v) s, o( `
    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 D7 U7 n2 s, W3 ?1 Q$ x    mcasp->regs->DLBCTL     = 0x00000000; // Not used" g" Q3 N& |' l9 E
    mcasp->regs->AMUTE      = 0x00000000; // Not used# w/ I. F2 @; |* t" N3 H8 A0 c! T
2 {- w3 D% R; ~0 |
/* Starting sections of the McASP*/5 Y7 f: a" w" ~- _/ }! w3 \- A# _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % }8 o3 c' U: h1 |2 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. H7 S6 Q" W, B* [) p    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; a; ]4 O4 J" ]7 F! P. T2 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; B9 S- M3 b5 ^  W. r; d4 K( b/ M
# c4 D4 U' G, L: K  e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. ^9 W* C) G% z$ @7 U% b4 ^) m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" p, B2 D. C3 `! Q: a, O, y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " X& l  y+ R; @2 K/ [5 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# ]2 w* }! U3 n8 J: r1 n0 B2 n/ l5 z4 ^" h
    mcasp->regs->XSTAT = 0x0000ffff;
7 l* \- t( ]$ i! E; m* @    mcasp->regs->RSTAT = 0x0000ffff; % D: x& ^( [# {1 E1 @+ c, Z

1 v/ l# |' ?" D. H. a& L1 @7 t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 V  L. X1 q( v2 }- e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 B! Q' z, W* f; ?: D: k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - g$ s% N8 }+ v  _8 R  d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ [7 d1 `( U7 H# K: G
4 x7 x- L3 h+ z8 l4 _8 M    /* Write a 0, so that no underrun occurs after releasing the state machine */
* i& N; [" a8 w! j" ^% b8 L    mcasp->regs->XBUF5 = 0;
0 u) {! f, F3 o8 v    mcasp->regs->RBUF0 = 0;/ \1 P* }* Q( t, k8 \2 H
6 e, e  E$ U8 E; F; G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' M7 p! P" J4 u/ x7 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 s* d2 W& ]+ ?. d8 M, [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! W. O: f) A" f" P$ V$ B: {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ]5 k, O% q2 v  o5 M9 I* O- K

1 J2 D) f1 I# Y) q! d2 y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# {5 X& C' w1 t# Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 x/ ]) K4 g. ^0 u' {
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  g2 e4 q. v( K( D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) ~& B2 q/ i3 W  y( d3 S

1 Y6 W; o3 F$ ~) {  ?    CSR = 0x0000;
0 E* }6 d* M: N! C" m% @    INTC_INTMUX1 = 0x3d;
; n* \$ k3 B1 J5 R7 a2 o2 |    ISTP = (unsigned int)vectors;, t' l& Z+ s$ W5 S8 o3 u
    ICR = 0xFFF0;  , i9 k- Z0 o4 L2 p1 u2 ^
    IER |= 0x12;  
* D% a6 p# z3 s* a! E( [    CSR |= 0x01;  . S6 D  x" s4 u6 A) H- m

& ?2 ^$ _6 J: P+ v+ y3 o) `! V& N; P% D9 p7 X, v, x
& T  O- q9 s" C
还有就是两个输入输出函数:6 A4 g  F0 V- @9 l
void output_sample(Int32 out_data)8 l) Y4 k4 J" ?* p6 q$ |4 H4 S
{) c2 a5 v' F' i3 u2 \
  AIC31_data.uint = out_data;  $ ^- X2 k, y6 d& W. b( a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* ^0 v6 j! M, K! e- V2 h0 G& d9 [
}- r* h# P" [. H
3 I, J6 K3 Q+ w  h
Int32 input_sample(void)
$ B: s4 G- d6 i/ o{  
) @9 Y! \' r; L  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 y7 x0 b& W3 K( v9 j! @; A
  return (AIC31_data.uint);3 }! ]$ q( z5 S! G' V
}
  a4 K% l% }" W" f$ ?/ d+ X& s0 h  l' a( l
分享到:  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-26 09:54 , Processed in 0.039588 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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