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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% ^" S0 }# I' [
main文件:) ?! L# p$ O* A' q* r) M( r1 W
interrupt void interrupt4(void)  " Q" Y. \2 H* s
{
; s1 o  {6 L+ v  Uint32 sample;( \/ Y9 E) L+ ^9 u- m- H& v
; x) e3 t0 w/ A7 ~/ |- F
  sample = input_sample(); // read L + R samples from ADC
7 l* J; G& R' S8 h; Z  output_sample(sample);   // write L + R samples to DAC
2 ]8 \9 c7 M6 Z  return;0 T. N3 f& N. c. }# E) q
}
! E( E& d0 C( U: N+ G  W5 L6 s; a1 O5 P. N
int main( void )
1 q7 ~+ F2 N7 D{- J" |# [0 i( f; p3 o  F

& M: Z; w7 `) u# J    /* Initialize BSL */- [4 f; p9 o* S3 P. r2 f
    EVMC6747_init( );" q+ n# l4 H' D9 ~1 X- l. _% M
        /* Call evmc6747_intr function */
2 K4 ^, l% b8 K1 Z6 x& `& Z" z- N    aic3106_init( );! z( e9 M; W& c
        while(1);' {: @1 i0 {5 l3 ~) b- w
}' ~1 U5 `( C  ?( T4 k- h

+ H" H/ u7 R% j) [( _0 _7 E6 x3 H' w+ ~: S2 j6 w7 `6 [- W0 s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 A, F2 j+ p5 X! R. ^
/* Initialize MCASP1 */; ?7 z+ Y# q0 \
    mcasp = &MCASP_MODULE_1;5 w% c% _, P5 G; @* j9 B. S
    mcasp->regs->GBLCTL  = 0;       // Reset0 Z3 m. C7 m3 J% L$ n1 c" }) V
    mcasp->regs->RGBLCTL = 0;       // Reset RX5 I: f- r8 |: X8 T+ g& H
    mcasp->regs->XGBLCTL = 0;       // Reset TX  I9 b1 Y" q- h* _
    mcasp->regs->PWRDEMU = 1;       // Free-running
; O/ z, z2 h  `9 I. V7 r% A5 P8 d   // configure McASP0 receive registers
' @( [( p5 A4 v, g/ a' @+ V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 U4 n6 Y4 M7 K4 H( J5 [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) w# u' {+ k0 H! O4 S- U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 {/ ^; D1 p: G+ K" o2 b+ y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ A. M1 X6 h2 }" g* G0 D7 `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 h# T6 g" s# ]; J. S4 G. m. l
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- ?: R3 b4 g/ s7 l( |! `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! D+ \& q8 o. Q0 _0 n$ v2 ^
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 H/ I0 @/ P( ?9 k' i2 U
# x+ d) J0 \: d# P# i$ \0 Q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ j9 l. `2 t5 D- y4 g: u$ l9 a/ i
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 B# z, x/ w- \2 y! p* ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# |$ l' j/ ]( ]' i. ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ e3 ?# p: c' s. p) u    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, V, X6 p) F! Q+ C
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ e' R9 v5 R6 a/ T) l- {( M9 b
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  C- B, v4 t# `! {8 @  I5 \4 C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ `( V. ]8 b1 ^7 z  a$ w2 Y
: {  S: y# n) W2 x    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) V. s3 f) @8 b. q+ n# k+ {, B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 w, w" u( @1 N: c8 E    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 m7 D8 S6 b8 q' L0 H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! {  \6 g' t  S+ v9 |) p
  X/ w  ?$ K, d4 Y    mcasp->regs->DITCTL     = 0x00000000; // Not used' [" w# c+ j3 x/ Z4 W, X0 t
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 b2 h  L0 X1 t) T+ V    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 B" P" m. C& U" y+ B$ ^/ L% S/ \9 z3 x6 R3 l' u9 k
/* Starting sections of the McASP*/  U8 w+ }$ o, V0 t; P- T
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 J, a5 S+ y) N' C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; ]: ^% O5 L5 \0 B+ w+ V
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 l2 j- s) p1 @4 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 B3 A8 x1 y% C) b
& [( }! \7 T, m2 a; x! k( g. ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 f0 X; z: \# q4 A$ p9 ^0 t" y; o. V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; o; i+ ?) R. R8 C) j3 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& K, U' `# ]3 J6 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ e  N" h) U& h" ?/ {( Y. _

, A3 b/ {# d" {5 \9 e$ k    mcasp->regs->XSTAT = 0x0000ffff;
' K2 {! T: t" U# F" O2 T# e& U    mcasp->regs->RSTAT = 0x0000ffff; 5 E4 `9 E! T9 w* X. h% d
1 `5 e* x; ]0 d) x
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 u& J9 L* y6 M4 O% d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ E, u$ e! G1 ?5 S' k. H* R  H
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& _* b1 R: _# p+ W. D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 i$ x1 O2 ^" z" Q
  E# M/ x7 D4 ~5 O2 @# N  i    /* Write a 0, so that no underrun occurs after releasing the state machine */
' D! I2 C& o/ [1 l+ \$ @7 ~. W4 U0 e    mcasp->regs->XBUF5 = 0;
- O5 b% b+ l7 ?% P    mcasp->regs->RBUF0 = 0;, o  N8 n$ k$ Y. \5 A
; @7 V% M5 L4 n# Y; ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + n  Q8 D. _0 d& L5 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# d, p7 y! c% o) S% u  N# z) W- X
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ O7 [( E9 y: N8 u3 T1 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ h9 w2 ]) v: O! ^  _; U! ]  d
0 y' r0 C, ]5 c  E' \+ h  ?2 Q! A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) w' d3 y- C' O  S6 O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  m; N4 u2 j$ L- s$ e$ y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 v. X( P& i, ~) f# g3 j/ F8 n  K/ M9 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 o/ _& c* |$ @: Y9 g+ x5 R0 e* y) l( b7 {- ?0 t
    CSR = 0x0000;, h4 k0 r% i6 P! s% r+ q
    INTC_INTMUX1 = 0x3d;
8 [" y1 _: T% E    ISTP = (unsigned int)vectors;/ K+ H" g5 c8 b6 G, E, M4 I3 z
    ICR = 0xFFF0;  
! `! m3 t, w, a2 k3 }( m6 b    IER |= 0x12;  1 [" g/ R1 f' N6 U& O! S
    CSR |= 0x01;  9 U# p' x3 y6 z4 a' \
8 A  N+ z6 l1 D* `1 R0 ]/ p

4 G) ^8 o' T% B1 S4 Q, V6 t0 e6 J( t( @' I/ _+ u+ X
还有就是两个输入输出函数:
9 f" t) u" Q+ q5 _6 ~4 Ivoid output_sample(Int32 out_data)& l( \2 P5 ?# Q3 U+ g) E+ x
{6 w, ~4 M2 ~5 I
  AIC31_data.uint = out_data;  3 z' @9 \" P( n) Z! \0 w' i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. b, Z% B/ T& }7 z6 X5 m' J3 H* e
}3 ^5 A" k( w# g. ]3 o5 \3 y# i: ^

; w! T  A* I2 e6 A) }2 DInt32 input_sample(void)* ?; I& L' r* s% y: S" K; J
{  
  d/ D5 A! T1 |$ C& S5 _, M  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& Z  r) p, g# Q+ k  return (AIC31_data.uint);, D0 b8 K0 k0 s1 E1 a9 C+ y! o* _( ^
}
) Z5 W0 W6 Y0 q- z) u. s7 j: X2 l2 C% C2 X+ p% d, P
分享到:  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 11:21 , Processed in 0.038927 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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