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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 a9 p& F9 r. S: S, F$ M) J, l
main文件:: ?6 X+ C& F' j/ }0 X% s6 d/ b; L
interrupt void interrupt4(void)  
/ Q1 R5 z( J- s4 S8 Q{5 ]8 u  T: L. S: r% D
  Uint32 sample;! z3 R& H& @4 X0 z3 c- J/ @7 m
' S) E/ }. x; k# K0 R4 D
  sample = input_sample(); // read L + R samples from ADC9 A# F6 J$ q: [; I- e
  output_sample(sample);   // write L + R samples to DAC / L. R) A  r: ~# r
  return;# V+ |, }" t% v
}0 V1 e7 Q/ U" ^" r- z, h

% R4 c  c+ i) k3 {! m9 {0 R4 |int main( void )
0 }1 L5 [/ P8 h# Z0 d9 H{8 U3 _" N$ a9 i# ^
& U; b( v  @. e, y
    /* Initialize BSL */
, O! ?- K  b* F( K% w    EVMC6747_init( );
% v$ x# p/ q, V$ j4 t8 G/ y        /* Call evmc6747_intr function *// H( u: ~+ x) ]/ ^( C
    aic3106_init( );
+ I4 L2 a- N6 O) i- T1 C8 o" P        while(1);/ B# P/ |9 @/ F+ K: A! b
}
/ u, Q: c5 \( V* B4 Q  t
1 _2 e' y1 e* Y% t
3 T/ G& N! k3 ^- P( r4 k: Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) K# ]# L/ \1 V" k9 |/* Initialize MCASP1 */
$ e9 h3 l/ f( }3 Z8 k    mcasp = &MCASP_MODULE_1;6 n6 a/ n$ ?0 u" p5 ?
    mcasp->regs->GBLCTL  = 0;       // Reset2 U2 H: W$ n, O; H1 ]4 `. r
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ ^1 M+ J3 _! h: _( M    mcasp->regs->XGBLCTL = 0;       // Reset TX) R5 H( ]" T8 W7 S4 }- z8 J) @: l
    mcasp->regs->PWRDEMU = 1;       // Free-running
2 h' x* ^1 v/ C) X, |4 D   // configure McASP0 receive registers* h0 J/ l0 E+ ~; I$ E
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ N. `- J  m$ [! x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ }$ G. V' I2 z2 w/ C, f4 M6 U5 V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 q3 w8 C4 g+ Q: E( p    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ Z  J7 X7 |# c. Z8 n    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): ]7 p2 f: f  {1 h3 m* x  j
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 K) Q/ c1 @9 D% o( y3 w    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 n8 Y6 w" Y: P/ e. l    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# R' k9 U* f7 K% {+ Z* f3 ^' y: ?4 \% u( E! Q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ M/ K* J  P8 V( a% I9 ]    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 l% ^* i# B& @: x, h    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ f* W" Q. o/ l3 V    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  _/ h6 ?3 K4 v1 ~/ X
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" A- B( f* O2 U/ F    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ |1 g: k# U4 G+ G$ z    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 \5 X2 ^4 Y0 h% `7 {! E$ E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- }2 T* J* J+ ]- {- v' j4 g$ B9 y
! X! m, t4 \$ H" V6 u/ Z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ D7 D- i7 r* [  t! x, `
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* s# o) v: ^( l9 y* @    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ j! \0 X% f3 i9 y0 \    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 M7 a- a5 N8 }, U# H' m4 G+ q/ s2 B
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 ~' A( K% f, i    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ o+ m8 c; F5 r  m" o" v
    mcasp->regs->AMUTE      = 0x00000000; // Not used! ~4 }6 ^- x+ }4 J) `

4 T- k4 S$ h2 Y* w: [# }/* Starting sections of the McASP*/: P& L# v; Z$ f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 k  H( G1 O( S/ E+ a& h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ v" n) w$ `- N7 N; g
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 J) M: ~' ]" @( Y' g- z- c5 y0 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 g/ [% L' O6 P8 X9 H
, ^- i( V7 a2 b/ J9 P& ?
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 T+ R3 D8 L0 g4 i* \1 _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 f# @" X, i& i$ a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 ~$ O8 P0 H& A6 C. L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 [3 |" G; e  Y$ b/ Q$ g% U& d1 J6 Y
1 s6 h7 t# E- c$ I/ I& l    mcasp->regs->XSTAT = 0x0000ffff;
: Q4 L  B: m# L    mcasp->regs->RSTAT = 0x0000ffff; ) ?$ ^: i4 g1 \0 I6 F

, R4 {1 V9 \4 e+ |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 [) k, M# |  B& K+ m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, [) V! I- D8 C4 n6 {1 O$ a$ Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + [8 l: l8 O3 _; v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 Z2 i6 G, r* j0 l  p
7 q0 n: t/ h6 |5 L# R$ L
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  V* J! u; \& o+ V" d* R) _    mcasp->regs->XBUF5 = 0;
6 v* O; Q  d0 m6 ~3 n    mcasp->regs->RBUF0 = 0;$ m$ U" J+ c" I8 i9 u( m

: d- g$ D% p. r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 L9 Z: [9 E/ ^7 l, Z! q4 Q1 W" u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- R9 t/ d$ M( \7 @5 [% i% c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! E+ k9 K6 M: {/ U/ N6 k  ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 B- r( Q# s$ p6 e
3 y4 r# t1 Z4 I! Z  E+ [    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 n, v' r$ r: @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: L* b8 U0 I  L2 F, k4 ]' X) x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! f; I5 A( u0 V! n) L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 x6 j" A( j4 G- e. E

5 v) x6 r* D( O( }    CSR = 0x0000;  d2 b6 m, _5 k; e/ \
    INTC_INTMUX1 = 0x3d;9 c( j1 h& h: K3 u  Y, F
    ISTP = (unsigned int)vectors;
6 G% X0 c9 E3 W' @! \0 E- A5 }% p    ICR = 0xFFF0;  ; y4 _$ Q( D  ]4 _
    IER |= 0x12;  3 U" P. M+ b; ~' d! @- d
    CSR |= 0x01;  
' l7 O9 f3 Z8 p2 ~' J6 s
& p; Q4 M3 l4 k) W3 J
% T" W+ F( Z' u$ i% W8 f$ Y
  ?- M# N8 {" Q) f还有就是两个输入输出函数:
( }+ g* j+ j7 _# tvoid output_sample(Int32 out_data)
, w3 E, f2 U% @* {7 G' E{
: z! c" {' u/ s( [0 j1 j  AIC31_data.uint = out_data;  6 {5 i; k7 G5 S# O
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. ]$ {6 E0 P1 q- Z: `7 B+ w/ p, n
}( k4 e9 b8 {6 k. e

6 p) Y( L$ p6 K# V$ k) pInt32 input_sample(void)2 O9 f( y8 k% [5 |8 Y
{  
& M2 V9 M7 K* j$ {/ o2 V6 x- H7 A  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 v3 W9 D5 j2 K9 G8 ]9 g2 c  l  return (AIC31_data.uint);& z2 w& u) o- b6 P, x2 v5 p
}
# P9 k2 }/ X. `- Q1 q- C
+ j0 v! _6 |$ b" e3 X5 {
分享到:  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 07:29 , Processed in 0.041850 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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