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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  Z; @5 }* S# @8 C8 B& a; M* ?8 X4 h
main文件:
& C' M$ V, U2 i3 b2 Finterrupt void interrupt4(void)  3 ]/ S+ I. A4 O+ U( H5 x
{& \! y* D1 A3 \2 `7 y5 `  U/ |
  Uint32 sample;
9 N4 ^0 Q2 M; O& p# z( r2 Y; ~" ?! {$ r
  sample = input_sample(); // read L + R samples from ADC
* R8 C9 o/ g7 W2 [  H  s  output_sample(sample);   // write L + R samples to DAC
1 I" L! _& ^  ^1 y  j  return;
1 j; a2 R$ Y( ~, A$ \% N1 s}
- c% x, o8 B8 |3 |- o' j! N
$ x% h, f3 y' E7 uint main( void )7 S+ A' P  y  p; _2 v8 ]0 Z$ S- R) a
{
% Z( d: Y3 }4 @& [7 t
4 K1 m3 Y! I# q) w    /* Initialize BSL */
/ j8 d9 e8 X2 E6 a) T& A    EVMC6747_init( );
8 C! v6 L& B1 L4 F: G        /* Call evmc6747_intr function */
: H! Y! K$ G# S    aic3106_init( );
. O" R. n$ n( T4 S0 F        while(1);; g$ c0 }- L3 m2 m- d
}
0 n& v& ^  J- y3 s, L8 q4 S. d1 @+ E5 M9 I. E- p
+ {$ [! p& i- ?- l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& u  s2 Q5 ^' i5 u) K
/* Initialize MCASP1 */
' U, y0 D7 E# Z+ c; W5 G2 W& |" U    mcasp = &MCASP_MODULE_1;
* p2 r# o0 t" x: S  g6 H+ f+ M    mcasp->regs->GBLCTL  = 0;       // Reset
, t' U' W9 ^* k9 w+ D/ M0 A- [    mcasp->regs->RGBLCTL = 0;       // Reset RX
" K  M$ P+ T: H# s6 x    mcasp->regs->XGBLCTL = 0;       // Reset TX' ?9 Z6 X# s: Z- K/ n
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 w4 l. N# m0 p, P   // configure McASP0 receive registers1 R- R6 {, w3 J: p% M& p: c9 q$ K! X, K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" `7 q. l& m5 l* ^8 C7 f
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* ]+ C! Q2 T' W# F) g
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& i  q1 D9 e9 s  Z: ~
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  G: p7 z/ r) t, {' ~9 U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* H( _! G8 `: }' V& N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: x( B& `: @0 V9 ^* j    mcasp->regs->RINTCTL    = 0x00000000; // Not used( x% d2 ^9 m+ Z/ J1 s
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* w# ], P  d% ]# N: D$ [: \3 ]0 |
( ?# X9 ]7 z+ \7 s6 i. c$ n8 }
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# c" m+ }4 g& p3 e: t    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# |  M( l1 |7 _; j7 Q6 y( x4 b( Y) ^    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' P( w3 Q$ ]/ O1 v( v' y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. M0 L! s& n8 Z! d- @+ r( u8 c7 w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) D7 _; g3 C! f, m! x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( c+ ^- {4 n- s" f    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ a# ]* K2 h% u) b
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 F, H1 x  }1 H, G; U" Z; [
1 n4 x( m  Q1 |% [! t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, J7 s$ z  T( y* v, B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 v$ O, r* A8 u; q, \6 Q% p  ^; ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 w- {- @# o, G! d2 ?3 K& M( V
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* v; D$ Z2 {( Y  t! d; j, ?! k  v- k: x$ [; c2 N
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 P) i5 C7 j' u: z6 \
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 O* }3 r* {) I
    mcasp->regs->AMUTE      = 0x00000000; // Not used' u! ?1 P: K7 G; G/ m3 |' g  k& B

( {$ W: @( }+ O9 h/* Starting sections of the McASP*/
( W, T: T, o' o' r. c' o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 u# p! _4 A( D1 i# N/ _6 w- G7 b2 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    Z) R& S1 y1 I+ l& n/ J" W
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 M% I% v" I* O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ s5 ~* ^' u% f2 v* H! S# S" W2 k7 g% d0 m3 K
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 u9 `8 D0 a$ x) b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ J7 Z) I( @9 H1 `% |# B
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 [% f, m0 O2 ^  K8 m5 n! }: g- j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  ?3 X* ?! ?- Y1 p2 }0 U

/ T( J9 U3 ~7 C2 C: b$ e, f    mcasp->regs->XSTAT = 0x0000ffff;
" M: ?. D. u6 Z# D0 ~- B    mcasp->regs->RSTAT = 0x0000ffff;
( {7 v4 o9 }1 g9 [* w
0 J0 y: p8 R0 F& D' t* o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" a) c1 U6 `# r) _7 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ Q+ I% o# m" `% K. O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # j2 h0 i( K% O" x$ |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) g3 C/ M" \+ n$ T
2 e6 X; i9 R* I5 Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */' f1 }+ I* ]) @  q9 j
    mcasp->regs->XBUF5 = 0;" M. F: R& ^1 S, o( W
    mcasp->regs->RBUF0 = 0;
' h. Y7 U' }% |2 z; S6 F8 v( x8 l3 b9 I! k1 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % m) F! d2 B) [$ w, j- |6 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. _; W- a5 I3 R2 k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( N! G" o( v! g/ {0 j8 Z' n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, I* s: r0 @' v2 z) h* o7 R! W( P  l, y4 \. h7 @" G1 X
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) C$ V* J2 P* v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 T/ T8 w: o. a) G- s' K2 H
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: K& J& s* S+ p" _- U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 p, J. _: H% c* a# P: _/ m* R

- _+ M% U7 Y7 U    CSR = 0x0000;
# A' C' h" a$ V' Z3 X& v    INTC_INTMUX1 = 0x3d;
7 K( R9 |6 h; ?$ d$ i. y8 g    ISTP = (unsigned int)vectors;
' q5 w: \8 U+ Z9 L  L2 l& `    ICR = 0xFFF0;  
& Y1 F2 h3 c- d. p2 f( D    IER |= 0x12;  
0 i  ?. m& Q, p$ X# ?3 X# v5 m    CSR |= 0x01;  1 w9 y$ ?  Y, o. Y3 O* L
; Q0 m+ F; w2 L4 s# X6 A  T

2 S% w/ a# ^  O) T, c
$ [" l; v' |: i. J0 \还有就是两个输入输出函数:: ^$ g6 y5 v" i+ a- V
void output_sample(Int32 out_data)
0 [8 M8 J. m1 t$ O: C{1 I& h- U9 \# y; w( x$ h' x* g  V
  AIC31_data.uint = out_data;  
6 `# s; E, A! G4 Y7 B4 t1 q  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ r6 }! }# y8 ^/ r7 f, O
}1 p9 [+ r' H2 l$ D! P( Q% U( |

& }. g6 }" r& E3 E2 ?Int32 input_sample(void)2 s. u( n$ {: U! h$ b& X+ a, D, Y
{  . }) W0 I7 T1 \3 S5 U; r, q$ F. `
  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ G5 ]" B* @% K( j+ h
  return (AIC31_data.uint);1 D- o' |) X) p- V* w& D
}4 P1 ~' ~; G) o$ R

( m" a3 g* [# M+ p: I- p
分享到:  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-2-26 03:28 , Processed in 0.046558 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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