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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* m5 d4 ?$ a3 t  T; hmain文件:7 @1 [$ `8 j* W- B- M5 Y% ^2 H) W
interrupt void interrupt4(void)  / i( a, J3 H5 }: m# D: w
{% e) H% L7 h1 F, ^7 ~" V: |. B
  Uint32 sample;9 O) I# z7 b$ N1 W+ ?
1 {8 j$ U3 N% ?! O
  sample = input_sample(); // read L + R samples from ADC
. s- I7 s, D8 I$ i/ @! Q  output_sample(sample);   // write L + R samples to DAC 7 ]; i  V+ I% Z- D
  return;
% r0 F2 S5 V+ P" q( l}, \, N. s9 h) C

4 ]6 T/ {/ l0 V$ L5 r) F1 r* Wint main( void )( `/ i3 ]& h% U  Q. n2 M: x
{2 M6 ~; j* D* l1 k; v& g; |# ~( H
7 O2 |3 E! s$ Z2 U) _) ~
    /* Initialize BSL */
5 q: V. B' m+ K% n. Y    EVMC6747_init( );3 b! N9 s& P6 a# P
        /* Call evmc6747_intr function */
( _! f; H# k2 Q    aic3106_init( );6 O* j8 K" q8 W9 P7 R
        while(1);
4 A5 N; k( C% @& @& Z0 A% G}' M1 U+ M+ i  y. K2 m- ]( E
! b4 g! k" n  f% F! h

5 M& |* i3 Y+ J* |, Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" i+ v1 U+ `& z; U8 ~
/* Initialize MCASP1 */
3 [3 L9 `) e5 V' n4 [$ Q    mcasp = &MCASP_MODULE_1;6 X& {$ U$ A% i- E+ V
    mcasp->regs->GBLCTL  = 0;       // Reset( U8 \: \$ z; }1 A: P
    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 t! e0 t3 G4 y# A    mcasp->regs->XGBLCTL = 0;       // Reset TX6 r$ ~. ]$ t6 B$ _! y% {
    mcasp->regs->PWRDEMU = 1;       // Free-running
. u, }* N  a( ]# K/ Y0 {3 L6 ^   // configure McASP0 receive registers
$ b, g1 `: F- [: v/ b  s$ x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 p; V7 Z: b1 A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ W$ h  T7 ?0 u1 J
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ |6 n# g* T! \( v6 K! v! p4 y2 x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ _  x: D2 I) o5 m1 [5 X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  B0 c& H# I8 K( B3 S* Q% H6 t5 J
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 i2 O( Q$ d0 t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( s6 X, k6 m  Q( i  m3 G7 m1 e- l    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 ~5 Z- t7 i( ?9 A  L# ]

; ]) x1 Y  V3 |- ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- \9 N, Y! X& e, F+ Z# Z) _5 @/ w    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* |1 X* D1 z+ x0 p- C1 B; O% E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) T  Q( S9 K, {; x7 l
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( Q: t8 p+ w' u9 i# `/ f+ n
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ E0 b2 ?8 r: p: }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. ^7 }1 I* I. \' \    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 I: G. ^" @  I# E. X& z, P    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- v6 ]# Y- o  `, {/ Q( _3 `4 r/ [
) J, `8 V+ G3 v. D1 ~: O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; Y# h. W# |, |# O  B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; o) h" A- I1 A" }' V+ }6 z
    mcasp->regs->PFUNC      = 0;          // All MCASPs6 j: h- p$ v' e- |4 x  ^0 C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. ?" H/ g/ ~; n- S, |

  J' b& {# P/ Q    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 E8 H/ G; b% V6 C1 H6 B8 ]: ~' l    mcasp->regs->DLBCTL     = 0x00000000; // Not used
* `/ K) |. S! U+ }7 i    mcasp->regs->AMUTE      = 0x00000000; // Not used. M4 E  e: g" {" C& T* m: T
7 S3 v4 L& i0 z! t3 O
/* Starting sections of the McASP*/
! l4 g% L& G/ x1 t( ^    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / d, j) x# [  I( B  t/ {. v- l& W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- w) X( o. U% ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + f! A" W- G0 |6 S5 T5 i# q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 C$ k* T& A, T4 E6 B+ k0 {9 u' ?  p9 @5 \4 f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & Y( @- L; |2 e4 I  u% L3 v4 J# g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& L1 J. ?- G/ ^- T' G
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 {+ H" Y( P$ y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 B' K7 ^  l& K7 H6 f. C2 d0 j
    mcasp->regs->XSTAT = 0x0000ffff;
) U$ E8 s/ y% n2 s7 C* b    mcasp->regs->RSTAT = 0x0000ffff; : g6 I  N# I% {
& A% d7 h( s  C6 M' o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 o" V# `) N) E; P! V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: N! Z* j! b( t4 y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  h2 t, e5 b, E! c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 N$ _' {# O) G+ g5 l' n" x3 X  ^& G, C3 V' @- m$ I
    /* Write a 0, so that no underrun occurs after releasing the state machine */4 }9 D; z* I7 G6 P5 c8 W# c2 p, I8 Z9 \
    mcasp->regs->XBUF5 = 0;
4 ]2 X. H3 y# K    mcasp->regs->RBUF0 = 0;
- Z* t4 f8 X/ Z
) l/ ~) a/ _' A: y% p% O3 [* \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 C6 c% c% u$ m" h( k4 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 I% z2 D3 s; m. z1 V" ]2 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 ~' R' X  C! u( T3 `" S2 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 T9 G' X* n; M; v' O
4 a3 g2 j; r! Q3 S    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % P+ d  d: j0 h7 v( x! Y. i. s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 v4 @/ t' @9 u' t0 L* X2 m# _
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' L4 t- U% V) D9 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! z: c, F: m: b2 _
, ]+ m- k9 _3 T+ N% G, v$ K; h- d
    CSR = 0x0000;
& J1 b' k/ M4 s7 G    INTC_INTMUX1 = 0x3d;
# z/ X( d5 ]$ q8 a5 m    ISTP = (unsigned int)vectors;
0 A8 E/ b- H& [# F# S! X    ICR = 0xFFF0;  1 c- B- s% R+ C7 @
    IER |= 0x12;  0 S/ C1 m( j- _; @0 C" f
    CSR |= 0x01;  
3 F0 d6 D) x% b7 I# ^* s' M' q$ z6 c( B: T1 }
* R4 i* K. |' ~
: D, \7 V( z- l) i
还有就是两个输入输出函数:7 I! [% @( L1 D; k( K1 p
void output_sample(Int32 out_data)% p. F  N+ z8 _, ?
{, b8 [/ u& ]9 y2 [0 w
  AIC31_data.uint = out_data;  / R2 g1 F$ j1 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;% [& |5 a& Z2 T, q" T! j% L  b+ {
}) @0 ~9 B7 f& ]: w5 _, C2 N3 D9 h

9 S% m& q7 c0 w0 A+ [3 nInt32 input_sample(void)
6 ]% q( s* d  L9 e& ?{  0 B# l* z1 h' U* D! |/ P& \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;' I0 J5 E2 Y9 h% U
  return (AIC31_data.uint);- |7 P6 g# Y% g! Z- C
}
  F( w5 b3 K' V* X/ h: s
( H7 a6 h& e& k9 k  n/ O( E
分享到:  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-19 19:38 , Processed in 0.043356 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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