C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 E* y; I( \. z5 z: X* @, m
main文件:; _' ?. L- X7 Z6 t
interrupt void interrupt4(void)  : G( _1 P/ c# d/ a0 B
{
+ v8 h# E0 w3 I& C3 d# W7 X  Uint32 sample;% P" k1 l% F" ?  f) ]* s
' ^+ f6 k0 ?0 d$ |: Y& E$ N- m7 \# L
  sample = input_sample(); // read L + R samples from ADC5 X/ A+ U% s9 G4 Z! Z! S' p4 ^0 u
  output_sample(sample);   // write L + R samples to DAC . p; g0 e6 n) `5 d7 f2 u2 G. y
  return;5 D" h( u' s# a2 l
}
0 [' A  V# @) m+ B0 W8 z+ \/ b2 X) r+ Y$ Y
int main( void )9 m$ u2 D& f9 l) B; x* {
{
. q) p+ f5 d! r' L- v& B( S0 L; q* B$ q3 f' P$ o
    /* Initialize BSL */3 l# n. R& j7 ^/ B. T& S
    EVMC6747_init( );
+ o: k0 x8 j2 f. D+ o. D# |        /* Call evmc6747_intr function */6 C) h& P2 B% Y/ y
    aic3106_init( );- w- @! g, I2 L, O" N
        while(1);, E  x5 Z+ P2 V
}
+ V' P2 ]# x3 m) K( R
: |7 E  k# A) M1 @: V, u
  C% z8 @/ U- [8 I" [9 {7 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ U/ p$ @# [9 s  ]: W/* Initialize MCASP1 */% H6 l3 H" p3 J3 e
    mcasp = &MCASP_MODULE_1;
3 A/ e# [; u# j6 v    mcasp->regs->GBLCTL  = 0;       // Reset" k. l$ j* p5 I! y# R8 I
    mcasp->regs->RGBLCTL = 0;       // Reset RX4 Y9 v/ g! _- i, \" ^
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 ]* s9 w' H# G! [
    mcasp->regs->PWRDEMU = 1;       // Free-running  O$ v: p  ~) G0 A. a
   // configure McASP0 receive registers
- ?: f2 V3 u3 @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- U: k$ D9 N$ G* R7 |/ J4 s5 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% i/ q" R5 n8 ?# S8 Y- [
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% u& V, [: f- X% }: {/ Q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 B; f1 W' x% u$ m6 w7 r* u    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% X* O/ J0 J. d) K  ]2 o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: l/ q3 Z* k/ m1 K, G9 z
    mcasp->regs->RINTCTL    = 0x00000000; // Not used$ {0 X& G& U) U2 a
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 v) f  c7 b* [, y2 I) [8 |

, q8 a( j2 G3 q" n! @3 U4 F    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- a7 n; e" l9 i( C5 ^. _- }; p5 o    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s8 H. b8 x/ f4 Y6 U    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: G/ ~: m, d* \4 d
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( m$ U( ]* W6 r. h7 _) F) o9 m6 g
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: j! w3 F& ]$ o8 T  C( B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! [0 X& _" c" w+ t+ e4 D, H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ U* O& E) r& h/ b' N0 ]" R9 f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' @. {! r( \4 w5 O0 o
% `* ?) z9 \$ [0 V2 k( @    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 Q6 Q" m- `9 Q' H2 f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 N5 w# h0 D4 O/ I4 J
    mcasp->regs->PFUNC      = 0;          // All MCASPs! u% Q) j4 K. F/ h& |. Z" K3 K9 t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; V6 j: r9 L7 j- |% w9 j) _9 |# D; K# {+ X; r
    mcasp->regs->DITCTL     = 0x00000000; // Not used' q% A0 P# M* `4 S9 U7 R  C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used: u5 N) [+ X+ o4 p# x- U
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- ]" \) D) A8 M; n8 [+ G& Z2 K7 j# a+ [; g
/* Starting sections of the McASP*/
0 N) V6 \5 _1 V& }2 H) {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( W; V, l' m6 B9 U4 K  z1 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 v5 H* c- G6 n6 Z. Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 P3 S/ p+ S' \: v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ o4 U# W/ s' t& J

9 B( _; @& a% X) A( P7 v& h) N    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ h$ W6 ?0 F( Z. @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) y$ z" H+ }" \# U, d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; L3 O; }  X2 G+ h* Z- e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 W+ ?4 d  J+ y# R. E
7 y8 s6 @: B' n7 m
    mcasp->regs->XSTAT = 0x0000ffff;
7 }# p5 ?' I. w9 L0 T( t, H- P    mcasp->regs->RSTAT = 0x0000ffff; " y- G, s( F) n8 [! C
: a& I; L7 h9 p/ M' ~  C. J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 P. P+ O6 n0 ?: I) O6 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# u+ m, o9 S4 k, Q/ L! U& W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - q& _- y. J. ^6 h/ ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 d: O# d) o2 l0 s$ Y6 v  x; x
( T) o' h9 C4 r3 Z
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' g/ F2 `' P7 [5 w5 B$ W+ Z" F* {  R    mcasp->regs->XBUF5 = 0;3 V+ I% s9 v( k5 V
    mcasp->regs->RBUF0 = 0;
! J8 {* y, {3 L* g7 t! A0 q) K' Y3 c) [. t5 r1 f. w
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! i. f- H4 ?" h) P' Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 O7 B9 k7 D* ?+ R  `( g( {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 Y9 c  F" \# k& k- P6 b4 H9 p( h$ H+ O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  s8 l# v# D4 J1 @: r/ P; m0 q* r7 P. S9 |& c8 f1 j( S. ~
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - P5 l% d- i& A/ |. ^& S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& I* V) I: S) U" @    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, A2 D/ K( T6 p* g) E- y  I! f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 {: C' J3 G( x2 |* }

  m" g: \8 R  Q( [1 G! k    CSR = 0x0000;
  ]  }1 ?% p0 i9 }% M    INTC_INTMUX1 = 0x3d;
. P* b7 V4 [  L: |    ISTP = (unsigned int)vectors;
; C% v. |; F- `; X+ p% }7 Z5 M" ?    ICR = 0xFFF0;  7 C! ~& M0 z  v5 M0 K% i
    IER |= 0x12;  
' M( Q2 O7 G3 @9 p' M6 h7 E    CSR |= 0x01;  . R  i5 u$ D6 F- I* }6 h/ r
7 T, f! m* u5 p) l, G

* M7 v1 J* }, M7 Z9 ~6 Z, \5 s& }! `, H" F/ l# E$ ]- k- P5 @* ~6 s
还有就是两个输入输出函数:
0 B+ q( b5 w1 l7 q& {: z% uvoid output_sample(Int32 out_data)5 }) W; ~1 K' R" {
{
0 q: u( _* N! h$ |0 {  AIC31_data.uint = out_data;  : Y* k$ v# p1 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! [( i7 c2 y8 \, O& A6 I5 `}+ ?. I5 J1 V7 {4 m! K
0 j, P8 y( [0 a+ V9 U2 |
Int32 input_sample(void)$ P( _" b, Y; ~/ F9 \$ O- Y
{  / g( K1 `: y" W  w! \& X9 v) P. J8 a
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 c" E1 I1 f5 _, A, V$ z+ u  return (AIC31_data.uint);. }5 l# F$ m6 w
}
( c* _$ s( e7 |( W9 o; Z# x7 R9 w( O% O- R$ ?$ q% ^
分享到:  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, 2025-11-24 02:31 , Processed in 0.048660 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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