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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. S2 z9 M/ [* k8 Y7 K; kmain文件:
3 b- M5 d, r* Y; B; F- {interrupt void interrupt4(void)  
. j# q: c7 m, C{! d; ~8 y. W) v5 Q: Z
  Uint32 sample;. G+ x8 m) O+ `
6 X5 g9 f0 z# ^" ]
  sample = input_sample(); // read L + R samples from ADC$ j& j) m/ c7 x$ I1 Z  V
  output_sample(sample);   // write L + R samples to DAC
" C+ _( v& E0 r3 ~: w9 @  return;# W) ]0 H6 f$ }& z
}
* e- h9 t8 U2 v& l5 M- y* r" Y
9 |' [: q/ _" uint main( void )
3 [( G9 |. [5 \5 t4 l  g) |{! V1 J) |, x8 B
3 }* k, Z- h; }3 K. ~
    /* Initialize BSL */% l1 V+ m: ]* w
    EVMC6747_init( );6 f6 \+ E' l! E0 I6 R( R5 e: U
        /* Call evmc6747_intr function */3 ~0 {: L' B( Q
    aic3106_init( );
8 Z& ?; C: ^4 ]* V( _" a9 O3 K        while(1);
: E! _) |, @5 U! u  \1 B* e1 Q: u* C}5 v6 K0 m9 o* i) i2 X' \0 H* c. y

# L' ~; ]8 z! L. S4 ]5 d6 m# y  b0 ~' g& h' E* E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ V4 n+ G( g, _( b
/* Initialize MCASP1 */
9 ~. m! C- I8 V    mcasp = &MCASP_MODULE_1;
2 Y; K! v6 s- ?, n6 ?1 }6 e    mcasp->regs->GBLCTL  = 0;       // Reset
+ T5 c+ ~+ [$ J    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 N( X+ l$ G! e* u% e& o    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 C5 U! B$ g! Z7 ~  q    mcasp->regs->PWRDEMU = 1;       // Free-running
; J7 L+ s2 H' Y. C5 M6 T1 _   // configure McASP0 receive registers
8 t% _1 B+ D6 o- C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ F  f( D. W- d: \7 N9 d
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, J4 x/ u8 k- M; F: d9 k+ L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 o* Q: c4 p2 ?9 Y3 v3 `4 t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ o$ J5 f% b2 C4 }  {# N
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; n; b9 m% z9 A. [0 a) w8 [5 U    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) i& t% K, d/ R    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) e' g3 v) p! M6 N9 Q2 X6 r    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% U8 q# Q1 d3 g0 S
0 q$ B! T3 _3 T0 z2 M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 o+ a7 y2 Z4 Y# A! S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: G6 V, q! ?; B/ Q$ B$ r
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, r+ L  D/ G0 D
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ Z8 f" R3 s. r8 I! m7 m& e- x
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ m8 m5 S1 K; b9 B2 b3 Z" l4 Q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 ^  h, F, S, U5 P    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% A" k. x. x/ V* h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: S/ t5 ^+ c( O0 S7 g9 g' p
" N5 I/ x1 N7 y6 G! e, T% `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ }) q: H( i9 V, R& Q. i+ @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( t) s4 W# ~" V0 k7 ~/ X
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 `# R& I; ~( C, ?- \
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ q: N: L9 @  j! T1 l& \
" S# [; i2 h( W- v  b    mcasp->regs->DITCTL     = 0x00000000; // Not used8 J: J+ a/ B. v# @: n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 s! [; l& c/ N5 Z    mcasp->regs->AMUTE      = 0x00000000; // Not used- h2 r5 _- M. M

) D0 G. Q5 E! S/* Starting sections of the McASP*/$ o) c; [* y; g$ `/ w0 q( X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* H; q' F( P# h* @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " Q; k4 Z# S# r$ a( {: v5 {$ z" O
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 @1 y; s; `& L$ u, A; |6 K5 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: @; e+ E6 }+ A  ~: G4 m! K, f- L/ H6 D! X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# ]3 y. {( S/ O; M& r+ s9 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 U* l2 L8 p0 O' W4 }  P) S4 e
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 J& O0 I, A  M/ Q, R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 q( h* F$ ^& P9 k$ y
1 P3 D$ D3 e5 C1 c: Y5 x
    mcasp->regs->XSTAT = 0x0000ffff;
2 Y- O: z9 s" }0 }/ \9 M    mcasp->regs->RSTAT = 0x0000ffff;
1 @6 R4 j. T3 v* u( O& W' \8 x% G3 K# _6 j, I! d* [  e8 [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; j" O1 s1 ?3 A# U8 w6 k1 z5 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 ~6 c" I" ~3 S- W: A4 q6 z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + v( Y; w: r; }" w. O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 X$ B% Z. L( h- B7 k' h
1 ?& D, B- E; E4 I  e, A* s3 v
    /* Write a 0, so that no underrun occurs after releasing the state machine */
( F$ m  ^6 f) ~; d) ~& `: ?) Z% s    mcasp->regs->XBUF5 = 0;5 o7 }6 }2 w5 S$ I
    mcasp->regs->RBUF0 = 0;- x0 R# h; Z3 O

; ?3 b1 T9 U% J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( G* L3 b" `/ O- a7 L" z) x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 V/ U! d4 u9 B8 L8 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) Y; z0 y& F; H5 ?' w% ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* Y/ L7 E) }1 @2 e# J) G

: i7 `! r! M# O/ f9 }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + i/ C$ N. N0 e+ c. A+ f9 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' s$ f5 ~3 l: _  K* H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" x9 B, Z  e0 ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* N" k0 I3 m( C/ }$ C- E% W& B
3 C# c. n, C# ^: U
    CSR = 0x0000;. c8 L  S4 W: @% \6 p8 q+ x
    INTC_INTMUX1 = 0x3d;( b2 v3 S2 V! o, k( z3 f
    ISTP = (unsigned int)vectors;2 e  j: @( a1 a9 W5 L. n
    ICR = 0xFFF0;  
2 [" C- f$ }/ c' y2 T3 O9 I  p    IER |= 0x12;  
8 s+ M% q: [0 u) q    CSR |= 0x01;  ( P# i* x  t9 v7 P/ o5 R

4 X" \- ?7 ^$ `/ \$ |  i. Q% O+ j# k" E9 z8 ^1 f
& u/ l+ t( T6 k# d' k/ Z
还有就是两个输入输出函数:
" R/ i! D7 w: K3 c, ?7 Q$ r: mvoid output_sample(Int32 out_data)3 Z5 A" N& t- E3 Z  ~
{' R  O4 P# M) t+ {  \$ |; X9 o5 Z
  AIC31_data.uint = out_data;  3 E( x9 n) B" `  o
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# Z& h. B; _0 Y' D
}
& l8 S% v9 ?/ E0 A0 h' A+ E7 S# a* F6 L5 g/ l, a9 d8 c
Int32 input_sample(void)
  _* F" r9 O& b3 k$ H{  
% P2 L  d* w7 t' L, ^; B7 ^  AIC31_data.uint = MCASP1_RBUF0_32BIT;) f3 O9 m! h1 r0 B
  return (AIC31_data.uint);
% E4 k$ }" n4 \' t, c$ W) Z}  y9 A0 E/ l8 c5 K

- a/ s* ^. o" r4 U. V  x
分享到:  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-24 07:22 , Processed in 0.098189 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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