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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: {5 |/ B* A' \3 d; l6 B8 E# smain文件:
! G! q, R" g# {interrupt void interrupt4(void)  2 r. C0 M1 K2 Q- D0 T) q
{
! k! o2 n- M- i' Z, B9 h9 f) B/ l  Uint32 sample;
, O  e4 J- a% \3 c. I- w0 o" k' }1 Q1 Q$ N3 F  }' B
  sample = input_sample(); // read L + R samples from ADC
  C- [2 h% S! G9 h3 a8 [  output_sample(sample);   // write L + R samples to DAC
/ }' y8 [7 ^4 B6 s' c5 r; v! K& U  return;3 a9 O% {2 Q1 h! @* Z5 u' d
}
3 k; o3 J4 x  M1 m3 [1 C7 G- u. |- ]0 z( I0 j1 G4 S+ Q2 A& k
int main( void )
. E% B8 M- Y7 z8 e{
- v( G4 s2 r& w6 ?1 g+ Z  X+ C: r! W( a
    /* Initialize BSL */) c8 N3 N2 |6 K1 c, X
    EVMC6747_init( );
+ {" E! |# }7 z# V; B        /* Call evmc6747_intr function */$ z# G( N! |* {0 X
    aic3106_init( );3 M8 k+ D" {! h% I" V
        while(1);; S$ h! N' ~% L; q( Q
}: e8 K- Q5 T/ @% I6 F
; J! }5 c& S: F: E6 Y
, R' M+ H% t6 o1 ~/ V6 ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: N$ ]/ U2 i! L% q  |; U/* Initialize MCASP1 */
3 M% {# O; j$ T    mcasp = &MCASP_MODULE_1;% \7 q8 i% J" v) I7 A$ f
    mcasp->regs->GBLCTL  = 0;       // Reset
; P% X& l# X2 P) _    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 A( l4 ?. t% Y2 v$ j" m! k    mcasp->regs->XGBLCTL = 0;       // Reset TX
& H; |6 H5 H& J# E3 N, y2 @7 h    mcasp->regs->PWRDEMU = 1;       // Free-running
" {- I2 C" y2 R2 i8 k   // configure McASP0 receive registers
6 m# z9 t( U9 O2 `' w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 Q5 h; R3 Z2 V  _# F3 d$ s
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' ]0 T  D: r8 R" g( S. c
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ t  U* K9 ~1 w( E0 c, |
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 R2 a4 {* j# _- I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" n( N) t0 @" n% G* `; U/ N' ], t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 u" S% Z, x" L9 @0 i, v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used# |. X# D( T/ o! S& E) f1 W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; w7 t2 K; E" P% I
" W" v" H! W5 r    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 e. d: e; f5 l0 u7 j8 R# c+ V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 [" s/ s# r% e6 B' g: @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 S4 x: d! l8 @! N3 U    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) t) |6 L: r1 j- d) b! S2 |+ l    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( _7 v& j: O3 `1 J  i    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  h5 V- m- q* S' A3 T: e: M4 o
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 K0 H/ B8 t1 Q+ y7 k: x6 H; u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; A5 _  h2 e+ O  M7 ^( E8 X. v6 \: {6 b; H
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* Z0 h' F( Z5 i+ _! J& B3 R' D* Q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; L! P! r+ i* b1 ^3 T6 ^3 N; x; _$ M
    mcasp->regs->PFUNC      = 0;          // All MCASPs8 g; w5 x+ @9 A  d$ ^5 h
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ x: |# y# c# h# O6 y" E, X- Y

- M8 s! a9 @" Z0 [4 K: }    mcasp->regs->DITCTL     = 0x00000000; // Not used! E5 m6 f5 ~3 n  a1 i0 f
    mcasp->regs->DLBCTL     = 0x00000000; // Not used" K# P/ ~$ k! E+ J
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 d7 e" l" q  x! p- L9 g

9 c* l( ?5 Q' p( c: z; H  |1 Z/* Starting sections of the McASP*/& L; f" H( I( _( k9 r" T) }+ k
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 w5 [! d) k; b; T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 ]# M3 F* p0 g- y! |  I" g
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( B) A. T; t. T! L7 y8 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 d$ o2 M9 H# ]/ H" L$ O
  l7 v* D$ }- J+ w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# k" Y" N$ ]# `4 t& H* P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& A! Z" @5 Y1 ]5 C. M+ ~
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 u1 Z$ B8 H" g! e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- p* @6 w# n$ Z; _/ R9 }# N# Z
    mcasp->regs->XSTAT = 0x0000ffff; . f9 T5 p! L0 A( |# i$ M& h
    mcasp->regs->RSTAT = 0x0000ffff;
" g9 E1 u6 f* U7 s# Y# s5 R' Z( X+ g  L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* L" Q, I) ^8 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 a! Y* g$ o' d3 J1 n" E9 d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " a8 I) A; S9 y0 Q. w# K, Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; C) F7 m, r: W, \4 n. C0 E8 d5 A2 j0 L/ w
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' s( C! r+ h, o6 ]2 f6 a    mcasp->regs->XBUF5 = 0;0 ^$ V6 c+ B# k
    mcasp->regs->RBUF0 = 0;
$ [- _9 V' i% d0 D, S0 m1 ~! B
' W8 K- [- c2 J. B  y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # J8 c) {0 r3 z+ M; Y9 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! f+ d: R% o8 y( w0 f    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 I( a+ G# ?* V3 p. C% j$ R' N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 s% _8 L* @% x) v

) s- ]; W: X. S    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- b, x8 @6 B2 c: W+ R' [3 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( e/ ]! L# e1 I2 L2 \* }4 M5 E$ I$ d    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 Z) N7 G3 B  q7 A% c; j5 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( F  r( i0 t* b% D
) c7 k' z3 D* v+ |0 y: o    CSR = 0x0000;2 }+ l" ^$ _; w$ ^) w  n% p
    INTC_INTMUX1 = 0x3d;
+ d  M/ |6 t9 O7 D4 Z3 f    ISTP = (unsigned int)vectors;
  T5 j  y8 [# n1 I% K' \( u    ICR = 0xFFF0;  
& X" x3 Y: |1 B% j: L5 T    IER |= 0x12;  
6 t; P' `0 D* R/ p  D- R; I    CSR |= 0x01;  % E+ Q* c; l5 A" E

3 c1 L, o  E7 w$ w# E8 ?7 k. ]3 D$ N7 a7 R# n$ {! d- `4 e8 S
- _7 }( t( u, f# O& q4 t
还有就是两个输入输出函数:
7 L' \* V6 J- U4 \" |! I7 k9 ]void output_sample(Int32 out_data)
( _3 h8 ~: P& `) W8 |! Q{  N7 E0 s7 Q  Q4 B! |# l% u" V
  AIC31_data.uint = out_data;  
! G2 ~  v3 E: Z$ S. S" ^7 L  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  g; e7 F2 M/ u% d}* J8 }7 C, z; x1 |, D- o1 o- q) b
. Z! `  k8 j8 Z) `1 X* m8 k
Int32 input_sample(void)$ e0 ]+ ^0 N/ f0 o' y. X+ M
{  $ A5 I" o' j: M" o& |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* C6 v2 C! b- s  return (AIC31_data.uint);9 r0 d5 n. X9 S& i: M
}5 Q5 Y) ?8 h/ p) b- T& P( i

3 ^$ S9 T9 X  J. V
分享到:  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-7-19 06:57 , Processed in 0.038290 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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