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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: e! j* z! v3 h- F" c- k6 W$ K+ l6 Qmain文件:1 M2 P* V7 ]' K; J% \1 {$ n
interrupt void interrupt4(void)  
. H8 }8 w0 S) c5 D6 o( V{
9 e2 y1 }! [: x% F  Uint32 sample;! e# O$ h8 Z; P5 i% C. b* ]

# K2 f" u1 [; A9 p; k  sample = input_sample(); // read L + R samples from ADC
/ q. F0 a- P1 ~  output_sample(sample);   // write L + R samples to DAC ! s# H$ a" i& W5 m) b2 Z) w
  return;
; Q- L% d4 l; K$ X}
' `2 N& D# o! k# ~' c8 ^! x  }' k# x& m2 d2 X) X
int main( void )- j, S8 F! m' @
{8 i2 A+ M4 s' e2 A

+ K$ l0 a7 B/ f    /* Initialize BSL */
$ R. A4 s) V6 U6 k6 \/ M- N8 p# e; F    EVMC6747_init( );) m/ z5 q( |* o- O
        /* Call evmc6747_intr function */
: v- a6 T# C- Z8 C4 j: B6 R& a    aic3106_init( );
9 @- @5 T+ @+ E% ]. k        while(1);
+ [4 A; j' [0 H) U}- |. ]! B- t( q

- l1 w7 d% b) P/ f* W4 A4 W5 v9 F/ j% m. p1 n, |" d# e- A1 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# v( S. l8 O& V5 V; Q6 w; V
/* Initialize MCASP1 */$ c  d' P9 T( E. a# n; F
    mcasp = &MCASP_MODULE_1;
. i* h+ x, u8 R4 b5 c    mcasp->regs->GBLCTL  = 0;       // Reset
% `  y  `( n: Z6 N1 F, I- l    mcasp->regs->RGBLCTL = 0;       // Reset RX$ k, E' n# ^; }+ b7 e4 Y2 |
    mcasp->regs->XGBLCTL = 0;       // Reset TX0 B& P9 I- |+ o
    mcasp->regs->PWRDEMU = 1;       // Free-running* g+ b$ m" r7 l( T8 F: q7 @9 A  `
   // configure McASP0 receive registers
7 W9 [$ L7 S: ]) {. V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 H  H8 w2 G3 B- d1 [& G' _& j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, i% j& I. Y, I8 a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 N: V. X, v# _2 v8 ^: E
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ a- E  V6 a" v+ u# q: @; n2 k# V$ Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# c0 ?4 ^5 }( p/ A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 U' {# q3 j& ~6 h& i: r    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 @) G: X' R/ s: v, F3 v
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, j9 }4 V# N4 t7 K+ w  y

5 b4 n: `7 k" {0 S0 I9 X- O7 z( f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 p9 q9 c9 P7 o" b& F; a    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ x" i. ^! c. R6 ~. i% g5 A( P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 n2 P/ c) i) O, M$ v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' a/ `, f5 b  T* s0 e8 F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( Q1 s$ _5 `  `) v: C    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ P! R2 G* g+ U* }% T4 X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. Z7 a3 C' G1 D    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ a* [% \% r/ J5 g! T6 {6 X  Q6 Z  O
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! A0 ]; B, P% e; [- N0 C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 b' e" m& K' j, K. f3 T! n# I
    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 t% \' C5 Z$ b2 k- C& E+ }    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 F* ~# e8 q6 L4 O2 y

' q; b  Y3 I: i  J+ @    mcasp->regs->DITCTL     = 0x00000000; // Not used
" |5 i( e3 \2 t/ ^3 b) ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 [2 y. P& T: @& o  D
    mcasp->regs->AMUTE      = 0x00000000; // Not used, w$ x0 c5 m! t; P5 l

- p' K. R8 i6 K/ N& O/* Starting sections of the McASP*/
. F6 [7 [" v; W; S" B. B% y' `8 i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' |/ u3 w! c5 N2 E! n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 ~9 v3 L  J; ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - L2 z  V$ L0 X* J7 b3 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: B# y: _7 O2 U2 |& u

7 k  D+ J% D& S* {: X    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % I$ z4 P# D* r6 m7 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; g- K9 i& q, U. G+ f) b- _    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 G" m! E* a) U2 R& }5 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" z7 k) o+ f% @* n- O8 ?; x0 m( O

8 s0 P$ a3 o, C    mcasp->regs->XSTAT = 0x0000ffff; " G- k5 S6 b1 y; |4 ^9 |- R
    mcasp->regs->RSTAT = 0x0000ffff;
! O, }' B0 G& C9 T9 L$ q& }( M' N2 w9 I- S( w8 ~  @" F0 A
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! `6 }( R0 @8 u. p, Q+ u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  F2 D4 j- l  v/ F$ ?7 F6 _2 G    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# \7 `) q- Y" L0 W+ a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) L" ^0 R: V* `3 F

: z  B: C8 t% p6 J" a    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ C4 l1 b1 v7 p    mcasp->regs->XBUF5 = 0;
- F; h1 g- Y. c. [    mcasp->regs->RBUF0 = 0;* C( D& f0 f9 T1 ]9 E3 a
3 w- I: P( {& L6 A6 G  \
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + P& w  V1 {8 p  x7 w& o* q; F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) r$ g: x% v  v- C1 \5 s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) X$ C' U; i- l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! d4 v" f, r$ O1 G- G) ?' K7 L
& C9 W) A5 g! g/ [2 j$ R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : X7 Q9 s3 a% R" f$ w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 o/ d7 y  l1 I  m1 O0 w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' H2 @0 b) N2 S* h+ V: k9 S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" R" M, C% P" Z6 t9 @# [1 B5 J4 ]! M# m! ]! w
    CSR = 0x0000;
8 L  M- \8 ~( |5 N4 `    INTC_INTMUX1 = 0x3d;
9 K" V! h6 }3 A5 x7 |1 ?    ISTP = (unsigned int)vectors;# F9 D+ U: [# @" q
    ICR = 0xFFF0;  : B9 ]  S! j8 {0 S" k5 m: H% l
    IER |= 0x12;  8 U) z1 C( W/ }0 F
    CSR |= 0x01;  
* M2 J' D% R$ D) e# w+ I  _% i* U4 a* a& Z( @# n0 a1 K/ }
4 P2 f& H5 l" ?0 j; R' f8 J" s

5 g8 G; q; ^1 k; [* h1 U还有就是两个输入输出函数:
. l* }+ ?2 `, R0 Xvoid output_sample(Int32 out_data)
2 z* Y1 Q- h4 y6 s' [; d{3 e* b* Z! V2 b- [! E' d
  AIC31_data.uint = out_data;  9 I9 |5 k- J1 x0 ]3 E6 T$ z/ l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ r9 m# @$ _+ U, {& U6 p! d& ~$ y}/ j. k! s: i* c0 Z
; D) r& p. q0 c3 D
Int32 input_sample(void)
% [9 e- D/ n1 u/ D" w5 a: O1 u{  # X; k5 _  f, g6 u6 r- _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ J$ T+ c8 `& d8 F4 M" Q  return (AIC31_data.uint);5 O- |6 h. x, F1 E* a
}* p5 m1 C- t: [5 T8 u% e
( d+ ]; Q: r4 G
分享到:  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-1-11 05:45 , Processed in 0.039382 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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