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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  g+ t5 w$ v/ ]) P0 ~
main文件:, {& L6 ~8 A# G& M6 g
interrupt void interrupt4(void)  2 q' ], U# }, ^- c- J% h( j/ {9 |
{: a- {9 N$ Q) D% a; R8 j, ^
  Uint32 sample;
! V5 Z* `# F" K1 R* q/ ?, w' v* i: O+ c5 V/ K! R
  sample = input_sample(); // read L + R samples from ADC, W: B8 q3 e& q3 h
  output_sample(sample);   // write L + R samples to DAC 1 o/ i7 P: k% z( L
  return;; M% T: U" ?! W( ^- N$ q8 ?& r4 w
}; t9 o; |& X6 }. y! [
& M1 B) [. ^5 ]" Q
int main( void )
4 i  F4 {, h. `1 m0 ~0 B{
7 e6 T9 {( {; J& X9 Y2 p3 F9 x. D& k$ f# l2 Z
    /* Initialize BSL */6 Q0 V- r0 u7 X4 ^" X3 S: O
    EVMC6747_init( );; H+ @5 A& A: U
        /* Call evmc6747_intr function */
1 S' f: W" n7 b) G) t5 z    aic3106_init( );
. y4 E1 L* E' Z" |% P% m        while(1);
) _9 Z  ^# o6 X7 N5 l0 O}
1 B( H+ q4 @  G: S; P2 M/ o' f& u
! H$ b+ N# U8 v8 ~* q; e7 F7 F- s- ^+ K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- v" ^1 s8 d- A- |/* Initialize MCASP1 */* l% f& r( E$ f7 V9 W: }2 M# }
    mcasp = &MCASP_MODULE_1;
' A4 ]* ~" g. m2 z, k    mcasp->regs->GBLCTL  = 0;       // Reset1 v& O! @4 P& I8 z5 [6 L1 m2 `
    mcasp->regs->RGBLCTL = 0;       // Reset RX* q& c$ r" T6 e% y2 e4 i( W. b
    mcasp->regs->XGBLCTL = 0;       // Reset TX# j$ J% ~1 u$ I7 S+ j
    mcasp->regs->PWRDEMU = 1;       // Free-running5 [# ]3 H5 D) v8 {; {+ K$ K
   // configure McASP0 receive registers
) I' R4 p( c5 V. c* X+ F) I3 i) t    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' p9 Q) C% G. x! S4 \0 ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 ^) a: E$ z, w9 W! j' o8 S- @: v. r
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% c* D  q$ S% }' v" k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) c' n' u' J! b5 d! z5 ?
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! D7 x% l! M4 X( z! L
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* I- O9 z( P8 V; b9 A8 W6 i! d    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ X" v& n4 r! F$ z/ E
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' N6 W& A1 [0 {; M' D/ m% y1 o
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' h# ?2 b1 s2 F( g* g4 f* w% [3 \    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 N$ [" ?% ^  g! l: U0 D" d2 w0 x
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( k1 P/ j1 p9 e
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 J$ D  ]4 r: i) l    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* \/ A! T: q0 k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 i* k5 Q5 }6 b- j! u
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 A0 u# K  R2 _- C8 o+ M4 A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* B- l( ~( [: L/ D" n
: r  v* h- B2 M' }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 Z6 d* O7 O5 T9 h6 U/ V    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 }( g& @& ^: G) O. x9 y
    mcasp->regs->PFUNC      = 0;          // All MCASPs( S. m. |! b9 S+ d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) q9 |) M. ]3 v" S% B' g0 ^! M# T4 ]' o6 a' f* o3 S7 v5 ]5 @
    mcasp->regs->DITCTL     = 0x00000000; // Not used
' _/ E1 U) ^8 z5 r    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 e. V- x- B. p  w* N    mcasp->regs->AMUTE      = 0x00000000; // Not used( s2 m# v9 i8 g; v
* }8 w0 [$ [( }$ F
/* Starting sections of the McASP*/
0 `7 j  }/ \6 _' _( l. |" ~    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , I0 n5 |9 s/ _( l' u1 \) P4 \& [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ P& x/ z+ v( O3 H  J# m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 H7 C* X$ M% H3 d/ ?) N/ k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' t/ X5 B+ j9 l, p! {
) a) Z, }; M0 B' s, r( G4 t# P, `    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' \( S' ?. Y8 O( T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# |) c0 N, F6 S2 O+ g3 q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 G8 V- k& C( t( _5 k$ o) @. c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 I* u: ~2 J0 }) `& P( m
4 o! B6 p( N8 Y    mcasp->regs->XSTAT = 0x0000ffff;
' \5 k. v# `) h( X% a8 U    mcasp->regs->RSTAT = 0x0000ffff; / ^! R- a2 F4 `

0 \, Z; _9 V8 _8 V) v    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 k% ]5 f" }5 U* T( t$ @- W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  G/ c# y* K6 P+ @: O1 t: B    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( U9 h# O2 I& e) c& A, J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 x! k8 T2 k# S7 k/ S5 F6 N
* U; M' q; N, p. t" J    /* Write a 0, so that no underrun occurs after releasing the state machine */( ^7 ~) X9 P$ m$ z
    mcasp->regs->XBUF5 = 0;$ a7 P1 V. {( a  A. ?2 \
    mcasp->regs->RBUF0 = 0;6 w( {/ M& A6 G" O# i9 M
' p1 }. m! C) [$ u4 g
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) h$ r6 g$ ~/ w0 B* o: H/ N- s* `- U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 k: e1 ]9 z5 ]& F0 {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % }9 K4 |' H7 O; f+ Z# x8 m1 O( g' d& v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 o! a/ K  o, D  o. a
# M3 g0 P+ `+ Q, @& e
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 u. J2 A! H% L0 o( b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% @' u) J' Y$ K* X( M; B( J" W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 i, l+ y7 q- W( V9 }: Y8 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 y+ {. |$ o5 S' a
$ z" }0 N3 C) T' S7 u; o    CSR = 0x0000;
# I/ v+ u0 o2 J) i* c; U    INTC_INTMUX1 = 0x3d;# `% t% |$ X7 X+ {& e
    ISTP = (unsigned int)vectors;
; _, u, e  \3 a0 I( B) H$ q    ICR = 0xFFF0;  5 w/ r, G" q% q3 _( Z
    IER |= 0x12;  . p' R* O+ l) {$ ~8 ]! `
    CSR |= 0x01;  
7 v- l0 D  V/ s0 I6 ~( R
3 F+ }" @$ l, ~+ M' a: l& x
) A& }# P$ \- d6 P* i! m( o/ o* l+ z
还有就是两个输入输出函数:" Z6 K$ j, t" a7 f; B% K
void output_sample(Int32 out_data)- q+ ^8 B: S# r. ~0 O
{9 x* F- ~( T" |+ e. l# W
  AIC31_data.uint = out_data;  
# Z- z! o4 v. P3 t+ q  i  F' H" |  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" B: [7 X  @) {4 L. m}, O7 f& q5 `) ^& B

6 \; Q1 q+ t' H, Q" ?8 G0 XInt32 input_sample(void)
& b1 C0 h1 h. ~9 h; Y{  7 n7 ~" A1 p' R: [# D0 r7 Z4 P
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- V: w* K, F* O; F9 M8 h  return (AIC31_data.uint);
9 C2 p3 \" P* D0 K* ?: P  r: I& b}; J* u+ D2 p5 k$ X& [  W
* S! d/ H# N6 V: P) C& y5 }$ R/ ~4 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-3-20 04:58 , Processed in 0.039788 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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