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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 B+ B7 K4 j' H+ ~main文件:3 Y0 D, W* s: V, r! j4 s( o  |
interrupt void interrupt4(void)  7 E! w  K3 F( X" Q  E- C  [! u
{
4 p6 d! _- E6 o3 C  E# j: K5 S  Uint32 sample;
- x0 D. a) L2 V/ g1 n. u' O0 I1 i
; Q- W7 D( m) }  sample = input_sample(); // read L + R samples from ADC
! q: Q5 R; ]! b4 m8 \% c" T  output_sample(sample);   // write L + R samples to DAC 1 J! ]  e) [" c0 N9 e7 Q
  return;
6 a9 E% B& r. g; Y: M* f}( _( A9 N: v5 Y* h' I! e6 J

+ m' v$ T: Z0 M5 W/ I% v9 R  ]int main( void )6 @5 W, l9 _" R8 T
{: p* ^" |- Y- K7 q5 v) B
7 O/ K/ ?& F; Q% x
    /* Initialize BSL */! I# b$ F8 _$ p& j) Y# y) t
    EVMC6747_init( );
/ A# x: f8 Z% o9 W        /* Call evmc6747_intr function */5 o+ G( f- p- v2 |7 l$ t
    aic3106_init( );2 s3 U( f9 b; g* G5 a# O
        while(1);) `2 |$ j6 l6 O6 [! G* u; }
}
2 a* n) e- e" J, _3 J7 y+ D6 u; L; i( V  E# g9 K7 h* |
: c) D, ]; B$ k2 y3 J3 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 s2 a' _9 ~' ~2 `$ a: Y, Q
/* Initialize MCASP1 */0 O5 O! W' z+ m7 v5 K
    mcasp = &MCASP_MODULE_1;# _& R: |7 }6 k$ V- J3 D  X3 l. J
    mcasp->regs->GBLCTL  = 0;       // Reset
" G3 j+ j$ v" C: Z) [! U% Z) G    mcasp->regs->RGBLCTL = 0;       // Reset RX2 @. X9 W9 O: T& M
    mcasp->regs->XGBLCTL = 0;       // Reset TX" A' `6 ~( `  ^# ?: W* P
    mcasp->regs->PWRDEMU = 1;       // Free-running' i7 R6 N8 @1 m: Z/ w- T
   // configure McASP0 receive registers
% a$ A2 s* V2 T4 _# [! p2 K$ I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 f$ x; b' ~1 Q/ s) [; d9 o5 T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# Z: b  l2 R! v+ p
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) D2 C0 H/ c% k. M/ Y1 o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 G0 Z% S) C. U  N2 s( M0 u# g    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. S, {* {0 ~% u* I  t2 g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  m+ H1 ]4 y( L! D1 a) l6 ]
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' M# i6 b. P* }( L1 ^
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ N. L' {1 }9 _$ D/ Z3 g* b7 i

: V, y' t$ {; x1 y$ z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 Z- p6 x" Q, v! t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, z' N# x  [$ X3 d- C
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! [- M" F/ E! J    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" s8 e  U$ S6 Y; P5 N
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 t. ^; B6 Q- m/ {! e1 h: y( I( I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 `( {. f2 g) R, E7 \8 R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: W4 m- K8 Z7 F. B3 @4 {# Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* H2 r  s2 h0 @) o0 G* X

( A1 l/ b  \+ U1 _. E8 y. Z* V, G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ P) \  z5 _6 ?
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 c% v* F6 u6 M' a. `8 |
    mcasp->regs->PFUNC      = 0;          // All MCASPs8 s- d3 m! N/ A1 a' s; _0 S) Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' x2 |) r* h; |# z
% Z: V2 H/ T; I' q* f    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 q9 w0 N" S) l8 i2 D    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( ~# Q2 i5 F2 N1 |& r    mcasp->regs->AMUTE      = 0x00000000; // Not used
# v, K& ]% K9 h7 ?) `+ W0 ?# P) D# T  q( _- ^; l9 Z* U  A
/* Starting sections of the McASP*/
0 I; O/ D0 g, R% T+ |5 G; w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; f- A6 K! t( H/ E4 k# P9 D2 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 Z; s  v& G! f; V8 L; ]( L
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 I8 r( z0 B9 b* z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. T. ?$ }9 T, }: q) J- A3 @( u
" W3 Z  t/ h) D( E0 J& `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & |$ ?7 x# J8 u2 J; h' \2 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* B0 b  i2 i: B9 \5 L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ k! M7 X3 M5 P+ m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: x* \+ U* u8 {3 r# Q' i& F# W% u2 Z% W1 Z/ c# h- J* ~1 \
    mcasp->regs->XSTAT = 0x0000ffff; : q1 C8 T" V9 x# v
    mcasp->regs->RSTAT = 0x0000ffff;
& T1 T5 p3 l: V- D5 {8 h# {2 Q
+ ^5 k& D* m! b, s: t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 d4 G; f& p5 t" }: e+ Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 s& c, x' H& W# \% D
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 U6 |7 D- l1 l6 _: M# Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 U6 Y6 V4 P' [
/ {8 W2 H4 E7 W
    /* Write a 0, so that no underrun occurs after releasing the state machine */. V5 R0 h& e2 K; d/ R. ~0 \
    mcasp->regs->XBUF5 = 0;
; k- L! L6 F+ q+ D5 E  y8 g) U9 z    mcasp->regs->RBUF0 = 0;
" ]! u! u0 m! ]' p! _
- H% z  `; b; B    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: |, i' r& |5 Q+ k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" b3 r6 y* P9 @8 A' A% j! a
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 X# |5 C  r+ H3 p8 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ U3 P$ W' \, e! _' n% G

. \; q5 ?, {) s  g2 J; s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; q7 l  w. z* m& \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, `+ i2 J; H: {; k1 @* ?1 H2 u& E    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 o! D9 G: J2 N4 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* F: u' n6 h$ g) H0 l

# T/ F  Y! s' J    CSR = 0x0000;
6 ^$ n6 T$ G  v* T$ t& p: w. V    INTC_INTMUX1 = 0x3d;* p, u! ~! Q  W/ N( h0 O- Z
    ISTP = (unsigned int)vectors;
+ t% n! ~3 A  }( E    ICR = 0xFFF0;  ' L/ s  H; |+ t6 G  k" X6 \
    IER |= 0x12;  9 G& c3 \/ f5 T& Q& Y4 ]0 [; @
    CSR |= 0x01;  
% T' r$ ]! [3 p+ j# h1 L0 x9 U1 ]4 I( A2 Z( i7 A  N
/ l! S; I: Y8 Z4 z: p
1 A3 G/ i" H' i/ ^4 K0 S; F: d
还有就是两个输入输出函数:
- p6 B( k0 s' Svoid output_sample(Int32 out_data)5 \) v% f! o( W! v& A  O2 o1 F
{
" }$ E" [8 |6 P8 l6 M  AIC31_data.uint = out_data;  
; M" y6 I% C4 w5 u  `0 M' j; e1 h  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* \3 P, f" w& G1 L( u}
6 r  c1 ^  |. i: D. Z
- x5 E4 h- d# y: q0 c# c; [Int32 input_sample(void)3 n' @* p! r1 x8 \; D0 S
{  
$ T0 Z0 a8 {/ c% E" q% o$ p  AIC31_data.uint = MCASP1_RBUF0_32BIT;- |1 z. q( \9 q$ I
  return (AIC31_data.uint);
! V* i' t( \( D' u; {6 x% B: h# `}
, O& a: H: p1 R5 Q* ?0 K! A6 O2 s# c+ V4 u
分享到:  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-3-20 23:16 , Processed in 0.040554 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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