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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, v5 k; W" e' ~" }; P+ xmain文件:4 P$ X/ U! A' |1 w9 l: ]& y
interrupt void interrupt4(void)  % W9 E* ~5 H* D* w9 z- }
{. s3 t9 P; W! t  j4 u( j
  Uint32 sample;$ x9 |# u0 [2 Z7 q9 n4 x/ A

, A% `! {' B0 w* T  sample = input_sample(); // read L + R samples from ADC
( p$ E$ M; R5 T: K4 T5 Z2 G$ P  output_sample(sample);   // write L + R samples to DAC 8 {6 N* P8 I3 ^# v' S
  return;% C+ N% C) z4 D* l& j* \: R9 |: S5 J2 J
}0 o  T" |8 w, r7 U

& n8 B6 v; Y; S8 aint main( void )
- s5 A( K6 C( {0 F. M  t) L) A{$ l* |' l( W( [9 Q$ o3 g0 E6 ]
# M6 E- ~" ^$ k0 B
    /* Initialize BSL */, J3 s% j1 ?, c$ b. j
    EVMC6747_init( );& ^% d$ V) L- ^6 H2 i
        /* Call evmc6747_intr function */
, {! L1 ~: s2 m' b5 ]    aic3106_init( );' G! }9 x& J0 P& X
        while(1);* y. v! M8 c! |. E
}
! B4 |. z; [' U( a
% A  D. e. Q# o: p- C- f3 C% n( N/ ?$ _- ?$ [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' F6 O( T; v1 G; g5 t1 a- `+ x
/* Initialize MCASP1 */
7 i& h/ w! p( T. i    mcasp = &MCASP_MODULE_1;* s9 R; q# I: y6 R  Q
    mcasp->regs->GBLCTL  = 0;       // Reset% M$ I: M$ f" Y' C. ]$ i
    mcasp->regs->RGBLCTL = 0;       // Reset RX) A" U5 L9 R/ g# Y" l
    mcasp->regs->XGBLCTL = 0;       // Reset TX. Y. [! D% K% X; \  u
    mcasp->regs->PWRDEMU = 1;       // Free-running
& H( B" a# y8 m- f- d   // configure McASP0 receive registers& h& H1 d, x8 V. X# b* M8 V
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 }5 B$ ]5 F! c
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ^3 i/ ]; @* E( }+ Q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 r5 \3 N8 o2 M# c4 d. t# ~    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 ]' ]7 X/ e9 s! |4 `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 }: _; h9 [: {' b9 E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ g) l* |' a2 X( R5 z+ \    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 a+ |9 B0 w/ b5 R! N* D% S    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- i8 P$ |' F' u- R& `) R# c2 S# L$ N. p( }( p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 h! H3 `  [, W0 ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 h1 t: c3 g- s) @: G4 p& X2 l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ V( {' I! W! {7 k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, `: `5 i4 {1 U! |, ~# V( ?) z/ u* k1 K    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; b1 S- R, \, r& v' D7 B% O
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& @* V: [5 U' _, w8 J7 M0 S    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 H9 \! R8 s1 }) U" h4 u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- Y9 c6 B, z7 K9 i7 Y4 N. j; u
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ R2 t$ Q) m+ D% i0 U4 p& f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& G- T1 O' E8 v5 o# N% w    mcasp->regs->PFUNC      = 0;          // All MCASPs* ~4 u1 N6 F4 H8 `& }% t2 Y" A) g( s( y+ P
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# j$ a* e/ q  r* n- {
8 P3 X( y$ `+ v4 Z# e! q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
: e# ~! |% e3 |    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 P4 }5 {/ h" p6 w
    mcasp->regs->AMUTE      = 0x00000000; // Not used
; }7 c, _9 D" \# ^: P0 u! y) x+ l- E: S1 q5 y% ?' l5 x
/* Starting sections of the McASP*/
& a& t# N$ _& I3 G2 _. t0 Z* k    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # B/ Z3 Y; o) _/ {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - Y7 e% Y9 B' U  W, T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - s, j1 D" b5 g' L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 P7 Z+ ^3 w" i$ f+ i+ j

  s  }) {/ d& I; A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * v- B. g. S5 c* V& d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! \) ]0 q: y5 z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ]" v$ B3 M. Z; F1 O/ P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! l+ {+ }- n( N9 q" \! f5 E/ H* X6 p1 ]9 @9 x
    mcasp->regs->XSTAT = 0x0000ffff; ! k$ x; L3 J& J  ~$ D
    mcasp->regs->RSTAT = 0x0000ffff; , A+ j% g* s/ Q9 B! j/ _; q) i9 l

# a' ?% d; N3 m3 [9 K: m& S3 x    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) O5 S3 x% v  a, X# S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) _* P% |+ E3 Y9 f
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! s0 e5 J- ~- [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" S; y  Y. n" z7 R+ S1 U& E9 l: d5 ~# ?- p. C/ R7 J* b) Z
    /* Write a 0, so that no underrun occurs after releasing the state machine */( N6 ~" \& G3 w  m, Y# n
    mcasp->regs->XBUF5 = 0;
7 \/ N) t1 g+ X4 U1 D$ G    mcasp->regs->RBUF0 = 0;3 L8 A0 Z& V8 R+ a% u, G, W

  Y* \2 S* u2 g    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # c7 b2 \* c- |* I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 n) @# Z- Z& P9 Z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 \8 ^6 ]7 K  W, Q( {2 d3 G8 V7 b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. {$ r$ M; y+ q4 f! k

5 I& J+ K8 S0 X" @+ k' ?% Q: L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ |# R/ B: }, P& k+ Y  Q2 {3 E- b: G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; w+ [* _  M0 J9 G9 A3 X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' w8 ~3 V" V# C- ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& u7 M8 R3 v4 g7 Y1 `$ ]! _$ {' j. F  n, a' Y1 @6 `. @! \
    CSR = 0x0000;. W% @. ^' n( I4 i) y
    INTC_INTMUX1 = 0x3d;
1 l! b9 e5 ?4 G3 j- {    ISTP = (unsigned int)vectors;
5 t6 x/ a0 s( l* |3 W) c( g( B8 e- `    ICR = 0xFFF0;  
. S4 m8 t: `6 J1 }) K    IER |= 0x12;  
" J2 y6 K8 S0 D4 i% c    CSR |= 0x01;  
3 V& u6 v/ I9 j  Q5 E+ ~- |, a* z& t) c" k
( j! D$ k2 n6 m3 x9 B/ T; J

8 m. f" ?" ^! n( `+ d还有就是两个输入输出函数:
& ^; N. {' e0 ?6 c$ y' Bvoid output_sample(Int32 out_data)5 n2 R4 w9 w1 r- n
{
, _) ?, H0 h3 o6 y; t3 s' P  AIC31_data.uint = out_data;  ! ~9 N" K3 Z+ x" o" U5 q# Z+ W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; v5 j( A6 @7 R8 C0 u  k6 M! F! a
}
4 y* G: Q# |, H  K! Q2 l* v: c& _4 C0 J, s4 }8 I- B# z3 K
Int32 input_sample(void)
$ W: R- A6 X& h/ o{  
0 h( A) B& i7 U0 A! \( K% @  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! |7 ^5 l' M7 J  return (AIC31_data.uint);
6 _+ R$ l4 a- y' n; u; m" F. W" M}
  g' X# Y9 f6 [( I4 ~6 ?' j- z  _4 R  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-9 03:50 , Processed in 0.062573 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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