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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. s6 q1 N5 b9 L2 r8 j: Gmain文件:7 H& d! q4 v) n) e1 U
interrupt void interrupt4(void)  
6 a/ @3 U2 T) x# C$ J{: K( u3 ]; H- g% R& u) W
  Uint32 sample;# ]9 g$ {6 u6 q4 |
. g2 z, H3 ~7 a$ R
  sample = input_sample(); // read L + R samples from ADC- S, g" _* _; o" z" }
  output_sample(sample);   // write L + R samples to DAC
' U1 y- x" j! L# {6 a, d  return;
. x% N$ |3 u8 Z, W8 d}* O7 o3 {+ `" `. N9 J/ Q5 |# s

4 P' Z1 p9 f8 a1 kint main( void )  G9 K4 g( P/ [
{
; ]' X6 V9 P/ N3 H/ a! w/ Q' B
2 P9 M% K( P: O* }: `    /* Initialize BSL */
4 c7 v# F1 f2 v' q7 B/ p/ w8 g    EVMC6747_init( );
7 M0 S6 ^. {. L7 Y6 l        /* Call evmc6747_intr function */
5 A6 C) @4 I& Y6 j7 |    aic3106_init( );+ U* g* c! \6 r( ]/ m
        while(1);8 A2 v7 U* {( z' B
}
% c7 R7 D8 s: ?  w
" g2 O1 ^& j! D5 b- g+ U1 B6 |/ ~  ~& b% I( M1 d' I1 W% }& g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 @. q9 \5 b' e* Y/* Initialize MCASP1 */
- l8 x( I' _1 T    mcasp = &MCASP_MODULE_1;
( x' n9 W( k* c; z* x    mcasp->regs->GBLCTL  = 0;       // Reset1 Z: w$ S( S1 r8 d& }/ V( P& D1 U
    mcasp->regs->RGBLCTL = 0;       // Reset RX# r* |/ y! l* Q6 p: G
    mcasp->regs->XGBLCTL = 0;       // Reset TX
" @- U& d0 n- g# W% t; ^9 o" `    mcasp->regs->PWRDEMU = 1;       // Free-running% _- S' \) v# p1 {! o7 ?; w- i
   // configure McASP0 receive registers- i8 S" a: u- k  U" D# Q! g" p) Z+ `$ O
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ s+ C1 \% [8 w/ H6 o! |) t    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 v" S9 }- _1 r( `; I% C; c* B' y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 W6 q& U- B/ N5 c
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): v; a# I+ L6 B' a
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ C" T8 L. \/ V" v0 y& a0 i( N( U    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, B6 Z" N4 |$ ^' D( w- X! |1 d    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) w7 m8 [* z$ D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: h+ h' k5 E5 M  s% t

$ S% I0 b9 M2 E. J7 u% k: k3 ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% Q: [- b1 {  a. y) E; F
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 Y0 ^5 y& f& M' U    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 C% h: u) A/ G' m5 M, n( x; A3 J    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 M4 v' E. ^( B) q: H
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  y9 d* k4 a5 K/ ?' M+ [) [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 o/ z$ s( Q6 h
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- G, M1 l. }+ t9 s4 l    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# |* i0 J8 R% K+ g
2 \2 J* D% \9 E& U( [
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 I6 x2 {7 n2 t4 m( `; a- x    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; ~: R- \/ w  o, W    mcasp->regs->PFUNC      = 0;          // All MCASPs
! a: u" z& m3 k% r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! |: u9 R) v- w1 ]5 |* P: C$ [/ M) f: n$ R: m6 N/ Y
    mcasp->regs->DITCTL     = 0x00000000; // Not used( Q$ ^$ n0 n6 U6 Y8 i
    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 @. W8 t- h) @2 z" c: }, H, h% y
    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 N1 W, K& b: A' m1 M& \8 c" F* U% D( U5 ~2 M3 Q2 Q* `0 B
/* Starting sections of the McASP*/
& r) I. o6 e5 ?; x8 C! q* J    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 r5 w% c6 K5 Y. @! p* t  w, v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( r8 G  G: ?: J2 v+ G6 n+ O    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 v5 [1 n2 e8 i. c4 C+ D6 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" b( B# v5 F; V# I: u* A1 A6 ^( I  v- ~5 b  Z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' u, R9 b( r+ M) Z+ r. p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ o, L) P2 U: v4 K
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ ^) K8 X4 k4 k# Q% B( V8 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ \; `: [2 O% \. V* G8 J

- @+ b1 h' x& B9 J8 B  W9 D, J& s    mcasp->regs->XSTAT = 0x0000ffff;
( h" i0 j! k+ u+ f( K2 P" ^# q    mcasp->regs->RSTAT = 0x0000ffff;
% F! r4 N- n+ R. }
/ A1 o. q  D6 V+ Q# N* A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 k4 s: N0 T- A/ d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 ]& }4 V& n" Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - W  S& @. C% E7 T5 k: v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 J7 P' x8 _2 j- M1 g, Z8 Y$ u' t7 ~, I! ~+ Z
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 W1 P, `7 B  ~7 X# K7 I
    mcasp->regs->XBUF5 = 0;
$ f9 w! Y0 k3 u& T' T1 e) t, U$ x    mcasp->regs->RBUF0 = 0;
: T7 a1 l1 u" H  ]2 r' A. e( A- G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 m3 {7 s, W  s; M2 S( I* a, E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% ]# m' }! r: o# r" T  ^. C+ O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& l5 e& q- L; g) V3 d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ?9 ?; [* V+ W& l# V

0 N2 H6 g* U' q7 l    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! q6 B3 d# S! d1 c2 E0 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* ?0 {& Z7 n: Z- X8 v; m    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 g6 S5 _' T& b6 W, l$ }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- P9 R7 v' [- V5 B
' H& J1 I& ]" m7 G/ q. O" ]
    CSR = 0x0000;
/ ]/ N0 z2 Q3 e3 P5 `5 |    INTC_INTMUX1 = 0x3d;) a3 H$ S7 q! `* t9 f( U
    ISTP = (unsigned int)vectors;
& ^" A4 Q, ^! d% i3 w# c& c    ICR = 0xFFF0;  & x7 b1 k6 K% a5 g, d) S$ t
    IER |= 0x12;  
! _) Y: M6 |% t8 x# x' U    CSR |= 0x01;  0 A) m% }5 h* R, {2 ?" K
( l7 j6 w. @# s' }8 o

- R9 [) E. r+ L/ m; o
; X" ]6 t& i" W  N8 I还有就是两个输入输出函数:$ t) l1 m7 S1 \# a% K9 `
void output_sample(Int32 out_data)9 \. V/ ]7 p1 H, @4 O
{
+ E4 M2 @) O" o7 D' P  AIC31_data.uint = out_data;    p% F6 k4 `1 k- \# v8 T! |* t
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) Z( p/ C% {9 ^# ]; A! i}, a+ f$ B: V; u- S* ~2 Z
8 u; `: G& {8 c5 P4 V- y
Int32 input_sample(void)
, o3 l3 j" h( ]* K# \{  
' \/ @: c1 W. L; S8 y  AIC31_data.uint = MCASP1_RBUF0_32BIT;
( G) r& Z) K1 K" V0 u$ |1 r  return (AIC31_data.uint);
+ z" _/ H3 v% u* c  Q$ i5 r}& A* N+ m2 t2 y) D

( y. `3 n) ^1 Z4 H, {0 d# _& a. b" b
分享到:  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-14 02:08 , Processed in 0.064750 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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