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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) d) @2 y* Z$ H' R9 r8 h' ]
main文件:1 k6 h* ~6 u/ m% q
interrupt void interrupt4(void)  
& X, v; j) P1 _% S# ]. l{8 l" o2 |0 |) D9 k* m% J8 D4 s
  Uint32 sample;
2 A1 t) @- [* n3 R# u' v4 j2 c8 B* n3 E' Z7 k1 H: x5 x" l
  sample = input_sample(); // read L + R samples from ADC+ g. u# b1 A/ }  u, n9 g- j
  output_sample(sample);   // write L + R samples to DAC
4 R, v' w' I% D) k  return;
3 @0 q% T# r0 X+ G}
9 U4 h! i% G" E/ I0 I9 R
$ E' F! n! v) \( F; n0 jint main( void )
$ C' E: R0 a& u( E& E$ I; g{, l( F$ Q) ~4 m. t- ^
3 ~3 F5 G! j/ {" T4 y0 k! x9 ^
    /* Initialize BSL */5 Q2 j! ]8 L* s9 @' {* x
    EVMC6747_init( );0 Y! }* q: C6 k# i( i& _3 F$ o+ k# @
        /* Call evmc6747_intr function */! x. f1 s8 i" I; w
    aic3106_init( );
2 y9 I7 Q. O" f2 y2 ^6 y        while(1);9 U5 q& f6 U, G3 n1 Y5 W8 c
}& S, U1 H: ]' X9 Z9 Z

! _+ o  X; f' I) S8 r( o
+ s) ?2 K3 k+ Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. L4 J4 Q0 @% j0 v. v2 A/ e/* Initialize MCASP1 */' Y" ~  l- |# c4 H" Y
    mcasp = &MCASP_MODULE_1;5 N0 e7 @$ R) `+ K
    mcasp->regs->GBLCTL  = 0;       // Reset
  X: B6 ?. c% ?; F: y, r4 J    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 U  Q9 s: }6 @1 p- {/ B    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 B  ~& \) r2 y, c, j& H    mcasp->regs->PWRDEMU = 1;       // Free-running
! }+ ]7 L) G8 P, y9 w% f   // configure McASP0 receive registers
$ V' O/ ~& g, a/ h; m* X; l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ _# }6 `4 V6 Y4 R1 |* F7 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; @" d' |" ?% u! A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 ?" b9 o' {8 P$ h6 c  G7 }' D* P" J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 R, O, t4 \4 Y  w; v) z, u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( C6 M8 l7 @' P6 }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 S( c& P0 N* x6 x+ {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 L: j8 B' Z- K3 C! m    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& H# c+ y3 X/ Q; \, X) c- L3 W: [- O0 Q) [7 ^: J
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 O7 M$ O$ {* G* G$ l/ |4 Q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 |1 F- ?, S! m9 P$ L% Q; t: {" O, S    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 b7 Z- Q$ j' b& i6 @    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( Y1 W; w; ]- z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& J0 S4 H3 h3 u1 Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* R, C( R' Z, ~$ V4 o
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 z& X1 f- M; P2 y- G3 n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 D4 h1 u) h) o9 ?+ L9 F! z; ~) i: ]& L; P4 Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ }7 w# L" G0 x( T' A' X9 G  J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- O1 [2 @# S" G/ {
    mcasp->regs->PFUNC      = 0;          // All MCASPs& w/ c) F- I& U+ r' `
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  a% K9 f7 U! V. C+ t* A
; A! t4 Z7 |; V" f    mcasp->regs->DITCTL     = 0x00000000; // Not used
( i& h0 C: f( S6 E    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. l& S( y5 t3 G5 I  `    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ Z4 G0 k& r# e% R& K
) m1 P; K" D( o4 q0 A; F/* Starting sections of the McASP*/
4 y. t1 C! X4 K) B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 e3 P7 H4 J5 n$ L" d& V) H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* z0 R' `" y9 g' `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 Z( v! C1 c# C: D7 u! p! ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- O( @/ T7 F# R9 w
' S5 P* `1 m; H* x2 u' J    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 w# a4 H' X/ y" {! m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' o: v" I+ Q, W; b/ u/ Y$ o    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 W. `4 Y' U0 q' J. h, w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, ?5 C- [; M# y: Z1 x8 W$ |& j$ x

: O0 }' B! l- `8 @, @1 K7 M    mcasp->regs->XSTAT = 0x0000ffff;
& x* [0 q) m9 [+ b, k9 z    mcasp->regs->RSTAT = 0x0000ffff;
. u  }% K8 r! e1 R- Z& [0 m/ [# v" M( L5 ~+ E& }0 G' {: z* r3 v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: j% L2 j4 s, }: M0 j4 e6 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 [% t% P! `& h    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 V) I- l+ E% ]/ h2 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 {! O: j" H' K& ]/ u1 Q% Q) L3 I; U* {9 y, U4 Z7 z
    /* Write a 0, so that no underrun occurs after releasing the state machine */) Q6 i7 [; V4 L  @& G& {8 Z
    mcasp->regs->XBUF5 = 0;
9 p8 _9 D8 S& w1 z    mcasp->regs->RBUF0 = 0;. K. u) {+ X4 e& @

9 K7 l0 S+ ]* e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 }6 ~" ]" e  G5 s4 J4 j# V# {" P6 W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 B: \9 ~7 D5 f9 z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " _' C% l8 U! U* T# @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' [' M4 ^( n' W& }5 b9 E" i: G  g! R
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! D6 M7 f" O7 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 R( T& i; K7 ]! b    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 n; e% t" c) n" M0 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% V! ]2 B/ V, u# Q# z$ ^* z6 w
+ P; j  s0 g) z1 O
    CSR = 0x0000;4 Q6 j5 ~! g6 @! M+ d  t, H
    INTC_INTMUX1 = 0x3d;( q$ \6 \6 ~* i
    ISTP = (unsigned int)vectors;! {# f; @9 d6 o& A
    ICR = 0xFFF0;  
4 H4 k9 `; I8 F/ Y  U% Z    IER |= 0x12;  
. H: @  t7 y8 ~! w( Y    CSR |= 0x01;  " a9 [) W* V* o9 |
  o5 P# `6 t+ w9 k  [
- s+ p+ H/ x6 ^/ x* R

3 K4 M4 @- i' H8 s5 ?* O) o. Y还有就是两个输入输出函数:
4 a7 h7 N' X/ ^9 x# P" T% pvoid output_sample(Int32 out_data)
3 u9 X* a' g4 f' [7 J1 X/ `{
, s0 V8 W4 F! M& m$ k$ t  AIC31_data.uint = out_data;  2 |% n4 q. D! x- x0 g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, V4 p/ `. f0 U9 D
}* \( [1 [0 `: A! y
, P: b" x, U* S1 z' z; [3 Y
Int32 input_sample(void)
& O% X6 ~2 K1 ^9 \2 y{  % a4 x! L0 `" `; R8 i8 J$ D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 |5 G5 T9 V* A
  return (AIC31_data.uint);: K% k" K( f4 `$ ]" D* k; C' W
}+ `1 |! k, ~9 B+ p1 S
9 V3 d) ?& o/ B& M5 N
分享到:  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-10 06:42 , Processed in 0.043038 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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