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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) J7 `* H4 n) P: Xmain文件:/ Z0 ~9 j& [" ?! W. B7 [) x
interrupt void interrupt4(void)  3 o" S9 J) t7 |; I. `9 s! }& U! ^
{
# ?1 c; T) z( B4 K, J* m" O: k  Uint32 sample;
2 ~& a, I) a( ^
2 }$ c' x1 C- V: ?" F! p0 c( l) s  sample = input_sample(); // read L + R samples from ADC
4 C, R2 ^# `9 d6 g2 H1 Z6 q9 t  output_sample(sample);   // write L + R samples to DAC
( p, b- n9 K) w; W/ Y; V' x0 j! }/ R  return;0 b1 y1 ^6 G1 V: }5 V9 N; y! z) \
}  \* A% B/ y# e9 s2 E
! @4 J' c9 N9 {
int main( void )
  ^9 C- g' r% x( o, U' o{, ^5 B- L6 k! Y
) i% F. k0 x0 l( K# e+ y0 C
    /* Initialize BSL */3 ?$ H9 r5 ^) |
    EVMC6747_init( );; M" ~! \1 j1 D/ u
        /* Call evmc6747_intr function */
- H& C. {5 Q2 c/ J( |: A    aic3106_init( );' M' E. C  t' v; q" D2 Z
        while(1);
3 U! q% F) W$ y8 A" d$ Y}! u  z- w. ~1 P
, `+ B" C3 r, D/ _

) U# r% J! B) m+ n" e! Z% H6 Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 m8 f& @" l6 m; Y6 P+ y) {% n/* Initialize MCASP1 */- J. J  C; ?9 \% @9 s1 s* w5 v7 O* {
    mcasp = &MCASP_MODULE_1;
2 e( S) x; B3 R5 F2 S# o" @1 L; P7 l    mcasp->regs->GBLCTL  = 0;       // Reset
: g7 J' q. B5 o8 v: i6 @2 u    mcasp->regs->RGBLCTL = 0;       // Reset RX5 J/ h4 k: k# S9 Q; Q) @4 I2 M& d
    mcasp->regs->XGBLCTL = 0;       // Reset TX# z* b$ o8 a" d" @
    mcasp->regs->PWRDEMU = 1;       // Free-running# W9 F: F, ^# k" H! f* }5 Y3 y
   // configure McASP0 receive registers
: A7 V; @6 l+ \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, g$ E3 q5 ]4 v; y* R2 g9 G
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 U5 c( l+ w( {7 w# O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ r4 v  K- H8 ^3 k. L. S/ H* R3 h, z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ n1 K2 _3 w: _6 W; y! Q0 ]  w
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)$ h) v/ r: H4 _: Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 ?4 A3 |6 w5 H7 l( Q  P) a3 [& {. V    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 F( u% [' \6 q) ^2 c  O& [
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 J4 B5 k7 |. P9 J3 }4 l& G& v$ K6 d

# V( F- ], [/ {4 C1 t8 K    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ U$ J( E) V' R" o    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 V- _. J" {2 I) ]
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ Y9 h! Y- m6 e' K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& x2 {. k. f5 U+ V  n* x    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) n3 k. y) m, j  v# c8 g. K' M    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& Z- A& l+ G  k8 U3 k, G- x$ T1 M    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ Z1 k9 a5 c2 [1 \4 S' o* V/ I
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% f4 m& O- u$ a4 u* z: ]
8 ~* ?8 S% Y! M! R9 m  G0 ^( N    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( c, F# ]) _  V
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 W* ?8 w6 N& @; I8 }9 y
    mcasp->regs->PFUNC      = 0;          // All MCASPs* z+ m; [! A0 s% P+ Z) D% }0 ?
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! }  c. m; W- c8 A
" x& i3 T' p. i6 U. U1 L2 s    mcasp->regs->DITCTL     = 0x00000000; // Not used  t; s1 b) ?4 x5 }8 E& W
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! I" Q* T- N# G; w& P    mcasp->regs->AMUTE      = 0x00000000; // Not used
! n- y& W0 D9 |6 E9 {/ j* [4 a  v# i
/* Starting sections of the McASP*/
0 L* L+ J: S9 q2 I0 s    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 {* z/ D2 l: \" p5 u2 J% Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 t7 i  f4 F9 ?% ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' Z7 J3 C/ M$ O" N$ W8 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 q8 Z0 U4 {1 w* M. w$ ~  i/ _- b/ C' T2 X- {( t6 \- }* L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : V/ q# j/ d# v8 f' B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 c9 @$ E, `2 J# C( w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 U: ^1 M6 }- v3 }8 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 L/ x, \' }- ^7 B

) S& X# E# n. H6 f; T7 [    mcasp->regs->XSTAT = 0x0000ffff;
% g  A3 }8 D" _4 E& o6 n5 v! f    mcasp->regs->RSTAT = 0x0000ffff;
$ l6 `! |* r3 w! o
& s: G1 t9 U5 U4 m( y* Z( p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& m: k6 W0 A, i7 F1 ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, w1 P2 W7 c; H! w    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' q' X: j  l% s1 Q$ i: Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 a) @  O$ h% K# u8 F0 U9 v; ?: k/ d2 t* J. t
    /* Write a 0, so that no underrun occurs after releasing the state machine */) N# ]. t$ }7 v& u8 g. O7 @8 s
    mcasp->regs->XBUF5 = 0;. `6 x0 Z# R% x4 l. {$ S% o
    mcasp->regs->RBUF0 = 0;2 m% J: [0 i$ K

0 @6 u. b! n1 @  e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " c- U: m! E7 M  S* c" A* R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* D% N) ]4 j7 l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / t7 K1 V: B1 t) N1 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 ?. i) \. U0 ~# E: G( f+ d- j3 l4 v; j# p  u2 w( s! z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 R$ I: M1 t4 |" P, N& ^; i* ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! I. k: e0 {9 \- f' Z) l: j: t0 I% c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 K. G& I/ G9 Q, L! |8 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) \; D- B( ^2 O0 m" A: u' Y
7 Y8 E1 Q9 c4 F* `4 \0 p
    CSR = 0x0000;/ ?: g+ T& e- j5 \3 ?; h4 L
    INTC_INTMUX1 = 0x3d;
2 }$ V* H( t& w7 ^5 @4 K    ISTP = (unsigned int)vectors;
5 P7 \0 A3 o* m$ v* ]1 M5 v    ICR = 0xFFF0;  / G. F2 S" i9 |& y8 Z7 k+ `
    IER |= 0x12;  / S/ g) \' R/ F" o& ]" B7 E
    CSR |= 0x01;  
& _& b* }; h4 ~8 _9 X$ W7 \3 T
6 _6 x2 O5 E/ Y' t, L- [2 g# g6 y0 B* r9 M5 f% h2 m2 D

1 _8 b8 j; I% A. g还有就是两个输入输出函数:
4 V& y* }0 M4 o/ {8 vvoid output_sample(Int32 out_data)
! a( s6 ~- Y7 h4 h{5 [+ e: @6 U9 U- G( @! a
  AIC31_data.uint = out_data;  + O. K3 U; o2 M
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ c8 A  a( g( A; D1 Y* U2 t" c}: L0 l6 R( d' I( X% k7 q7 w. \

! T+ J8 F( ~% a$ p8 Z7 CInt32 input_sample(void)6 }: y1 B, h, i; ?
{  
6 d1 C7 S2 W, b4 b! v& R  AIC31_data.uint = MCASP1_RBUF0_32BIT;; D7 i' Z% V  s7 J0 d& a
  return (AIC31_data.uint);- s4 r6 @& o# x* N" B0 F" S5 c
}( T. ]3 v1 G$ n, L: J

2 h9 B. A( j; b- r* w9 |6 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, 2026-4-2 15:33 , Processed in 0.040981 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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