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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:- E" w) j1 x: U3 z' V, [& m
main文件:/ Y1 X' n7 ]0 w/ a
interrupt void interrupt4(void)  : x6 ]6 F3 Z( R
{
' f) V- S6 q7 G# d  Uint32 sample;$ k2 e! T7 X5 A8 _& C
! r+ Z# o1 J  v
  sample = input_sample(); // read L + R samples from ADC
% ?6 X. L" ^$ H2 |7 f) q  output_sample(sample);   // write L + R samples to DAC # q  l/ i1 u" @$ f7 k* t
  return;
8 S' T) j$ {& c+ R/ \" ]5 Q  [: m2 B}
, w/ _; u- G; N) I; Q3 B4 P; p! k
int main( void )
2 }" ~6 J9 @$ J9 M1 l2 y0 W{( v/ y9 |( c' k) T, v) i1 q
1 z0 k5 v9 N4 o  ~! f5 l
    /* Initialize BSL */
( k: I) L5 r# ~; i- U" c8 Z    EVMC6747_init( );
- Y9 o9 w; W) x' D' D# W        /* Call evmc6747_intr function */
. s6 ]+ ^, d7 @1 L- M    aic3106_init( );9 k( l7 j+ m3 S" p9 k# C
        while(1);
, Y/ a2 K8 g8 I! s8 M) a, H}: U  c" a. y: ~2 y& E  r1 a% y

" _' V0 i, W! {3 s
  q. s+ g! N. k. {' G  @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# B8 i1 \' B4 e3 F2 Z
/* Initialize MCASP1 */) I9 l' S) [8 m1 f! t) [& C! ~0 F
    mcasp = &MCASP_MODULE_1;
* s: X; E7 \2 l: O" H9 F    mcasp->regs->GBLCTL  = 0;       // Reset4 K/ o( D8 z  j  j1 ?, J6 L
    mcasp->regs->RGBLCTL = 0;       // Reset RX  _" U6 z7 Z' K
    mcasp->regs->XGBLCTL = 0;       // Reset TX5 l& y0 f% I7 o$ ]
    mcasp->regs->PWRDEMU = 1;       // Free-running
- u1 x' X  a5 f. e0 `: W" j6 J; L   // configure McASP0 receive registers# @# ~% X* R2 @  Y: a5 i5 Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& u/ n; c7 p$ f# ?" p6 g* O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; W" O9 m0 l( j
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* j' b1 I, x5 S3 t6 Y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 {  F" ~9 S% L( c! o
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 d/ N, S' q: E9 A    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! k" ]  U% T- _# m% m# n/ v    mcasp->regs->RINTCTL    = 0x00000000; // Not used" A( L7 A# Z3 A2 z  H) m1 m
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, u, G% L% m: j1 t6 P; P, a6 N3 f! G6 i& v; B; @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 M3 z0 V2 j5 t6 F+ ~, J$ ]    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 C0 n) u' Q( i) J    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% R7 U9 F+ l. ?* R1 z! e5 M    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( E% `8 L6 @, z, M$ I  s+ f
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ q# S9 `3 X8 C2 o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ D9 E0 e+ f0 L- r; Z: H% h
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* j% v. A, f" d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 s9 N% `3 N9 P: ^: H

" M$ J# P. u0 r7 ^) V  X# J. w    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 W3 m5 t6 n% P8 H; d. F9 E+ t: d
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( i! Q0 G0 R0 m0 ]! c, Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs. k  Q3 z) [) _' E1 e
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- a, Y9 z3 `9 f" W
* O& `$ H0 K6 \* p' v) g3 B
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 F) Y) p! e* u- R* T
    mcasp->regs->DLBCTL     = 0x00000000; // Not used4 {8 w! {) t# L
    mcasp->regs->AMUTE      = 0x00000000; // Not used; b: t  ~* f7 F' W
9 g3 v& q% i# R6 o- k
/* Starting sections of the McASP*/+ f6 N$ ^, a7 B* ?, @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 v1 J) |( I: o- L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' o/ U8 b6 z  I* |" j' X
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 a7 D1 P' }* o4 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 d+ J& I) `6 u7 q! q" v
4 F9 ]7 u, J; x' g6 b0 y5 O
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  E' x7 h# S- Y3 V, b' P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 ?* R  }. O, Q. f6 M7 m( n    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / ~  f: Q8 r& B2 \, l, L! q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( @, ~% K, t% S+ `4 C& g, N$ y
1 w' X5 F1 o3 O4 J; K/ I0 m% U
    mcasp->regs->XSTAT = 0x0000ffff; 5 l' R- a( h/ x5 ^2 }
    mcasp->regs->RSTAT = 0x0000ffff;
" z/ |! s) N9 Y) i' G$ K; j( H4 u+ X; {( u: v& Z  C0 s
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, D; V( P9 D' Z4 c. P+ P8 y( c+ X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( g  `4 o5 }$ L. ]8 K    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 \3 q1 k( M9 ]+ C& d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# M; u/ {+ x. O4 w' r

, P5 c8 i: j6 h$ k( b) E, i    /* Write a 0, so that no underrun occurs after releasing the state machine */
! A6 ?. P; _. E" o7 u# \" b* ?    mcasp->regs->XBUF5 = 0;0 A  t3 L% D* M! L+ n
    mcasp->regs->RBUF0 = 0;
! R. g% x4 Q* C" g- b2 x
+ ?- Z6 l9 X2 J2 Y    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, ^6 S  n8 U9 z+ u) r' x3 e- t4 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- G+ H4 d8 w1 o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" V! ^5 |1 s* Q$ M+ H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; B$ `+ q) A, ]$ d/ N. f  G& J
0 E! @0 d' F5 @6 K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 y1 g( _7 p) Y/ ]' A; b9 [" i* f& W5 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" w: Q  v# J* s9 ~$ W! l& K    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ ]& I3 E2 S. U7 ~4 J( S7 Y0 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, [+ v9 v* j; k6 K+ o* Q! K* m
" x- L; u; r  S7 H' E5 z: _
    CSR = 0x0000;% A! z. T  v5 T1 N8 Q9 s  u
    INTC_INTMUX1 = 0x3d;4 C# ]" u( f4 R4 A) T
    ISTP = (unsigned int)vectors;# ?1 b; o9 _; _4 k6 V  D
    ICR = 0xFFF0;  
, M+ F# A4 i8 ~    IER |= 0x12;  ! E1 Q1 D/ {2 z: C. ~
    CSR |= 0x01;  & P+ N" S5 R8 }1 J* ~
- G/ E( Q6 t( G/ \; q8 [4 Z+ q
  R6 ^6 [5 U  m$ m

' G6 q6 T8 O; ?4 _还有就是两个输入输出函数:& j/ x5 p! `9 G5 r
void output_sample(Int32 out_data)
! \3 ~2 V0 {" h{$ A6 k9 l( |3 B+ _4 s/ {4 i
  AIC31_data.uint = out_data;  . R  F. m$ s$ r2 N$ S8 s/ e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ ]. u6 w: Y: I4 L! g1 u  b}
. {- x4 A9 ~% o7 D0 ?7 q( A
$ f* Y; U9 o  D" h( RInt32 input_sample(void)
/ E- v: N6 }7 \: Y, Y+ `{  
, T  \; }( k/ @1 j6 N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" c" q# [5 \' B  return (AIC31_data.uint);; i/ h* R: c5 Q. Z
}; i1 P/ P& n4 j' m& c1 q

6 a1 s) u) {5 u9 y( t# G( i$ O
分享到:  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-28 04:24 , Processed in 0.042845 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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