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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: m' M: C* e: N! h, v4 d
main文件:- [8 p: i8 |$ J3 m: d/ p- v
interrupt void interrupt4(void)  
9 Q: r) u0 r8 u$ L5 n; S* q{2 o& J( R/ c; u3 {" V" y
  Uint32 sample;  ]4 K/ D: b- b# v
# ?" h6 E& z; K6 d( _
  sample = input_sample(); // read L + R samples from ADC2 `! Q5 R, c5 w& |, C. d) i  ^4 [" [
  output_sample(sample);   // write L + R samples to DAC 9 {5 T) h5 Y" v; B. c, z+ i! N! S% h
  return;
" X. y& E" j3 ]}
7 i0 W  F& A6 k' L
1 `" X( I1 G7 Lint main( void )
8 l& K' p- X) x. [  ~{
" G' R+ b: \% y
' E1 Y+ Q1 a1 w. z& X3 g    /* Initialize BSL */6 w2 O. `9 q& M/ N; [1 R! R0 y
    EVMC6747_init( );
7 g: M9 a! a& A' f        /* Call evmc6747_intr function */# M! K: k% y, X: v
    aic3106_init( );) g- O  ~& _* L5 y; d' ?4 J: Z& x, }4 {
        while(1);
; L, e8 j5 C( V  M: _- Z}+ J4 V5 H3 X3 q. q

( w* f5 e, _& c7 s) O8 \  T: N% G& X. v% c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 Q1 w# a9 H; [3 V( W0 ~% K! {
/* Initialize MCASP1 */3 [% ~. o# u* p% n2 P$ ?: M
    mcasp = &MCASP_MODULE_1;
) ^! C" o! {: j' ^/ j    mcasp->regs->GBLCTL  = 0;       // Reset
& ^7 U# a( u  @# q7 v, E    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 o7 z+ J( @( o1 {* P    mcasp->regs->XGBLCTL = 0;       // Reset TX8 \, S5 i% P+ `. S6 P
    mcasp->regs->PWRDEMU = 1;       // Free-running' \4 h+ Z5 B1 a  K
   // configure McASP0 receive registers
0 u6 _! N. c9 G) O+ A" P$ m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 s& E/ D1 e* Q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ D0 w+ w, N( c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 @  k7 E  I4 w    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* V7 \  z5 R  }' V; [$ i6 P
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 y$ g' W! U# n) f* I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 r$ r8 V# A' x' R. C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 k/ |- {- U6 j$ Q2 X9 s    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) k0 Z& E) U5 D* {/ ]: Z3 R# l; K9 l5 J  C
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' z+ B, V. k4 z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 h) T" S! i7 l4 g2 f    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& p# l( T3 g! w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- h, n! F. C* S% P2 Q2 y& O
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 H) D$ f( Z# O: l% l" Y" |  K
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' Q; [1 U- {& A" j; k7 s$ ]: B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  o5 x( m; [1 n/ t    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% r& s, ~% s9 Q; M

% v# g1 M* F9 `% V- _' }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  S, h& m: d3 o( C, D1 x5 H" }    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- C6 S' `% B2 W6 Q: s" M" p
    mcasp->regs->PFUNC      = 0;          // All MCASPs
( c. C, q& N* C: Y9 V    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" |: \  m8 {0 _
$ u0 g4 n- Z4 ]. k. I* o    mcasp->regs->DITCTL     = 0x00000000; // Not used% Z! f- @. e: L3 U4 A
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ ]& y4 B; f3 J/ s. s7 o7 b7 y    mcasp->regs->AMUTE      = 0x00000000; // Not used8 M  m) |" {! i

# m8 r2 f" G+ e5 f: ~: G+ L# o/* Starting sections of the McASP*/
* Y5 @* l) r# l$ [0 X; S' L% ?$ {5 W" c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 S2 }' j* N" J5 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 O/ o- }$ ^8 z8 Y6 f0 H    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ S9 o; D! b% E7 p6 O: D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! Z5 }; W/ @$ A( G" V
" v8 R  o" Z. G# U" h  @
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, G7 r+ s8 V/ S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ f$ W. F6 D% n9 \9 K' x1 A    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- V- P  U* P$ ^1 Q3 G; b6 `, j0 W3 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 v6 E+ k* i8 y5 G) w( W' K3 `: x+ j4 R
9 c$ x- n: J6 v3 @' w+ m+ W/ Q
    mcasp->regs->XSTAT = 0x0000ffff; 6 a; w1 h- F$ H
    mcasp->regs->RSTAT = 0x0000ffff;
) Z* g* h9 q. t& X8 l& _' s) q- U1 @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 M. I) f& y: U/ E1 V4 H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% Y, P, }0 M2 _; M5 z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; f# `# p, y) N2 F  T6 d- X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 L$ e1 z4 z9 m( d" F- L9 n
: |2 Z$ j& y/ z) {1 |
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# D  f. e% w% t' }# q+ I    mcasp->regs->XBUF5 = 0;
: N7 [9 d2 k4 h; J. ~    mcasp->regs->RBUF0 = 0;4 d5 H7 z; ^8 P& ^6 u+ t

  h! {3 U2 ]# R* p) A$ i1 a/ m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; O5 ~( P! m; H% c6 @" V4 a& \# ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ p/ c! z4 k4 g, U7 c# |
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . n4 O9 t, o. D$ e2 V) ?  C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 V, V, j6 o0 v" @5 B
( D1 x9 H  i$ |( d+ Z+ E& a    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; ?# n; A  z2 ~/ q) k3 ?+ L. v) ?; u- F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ T! }4 {5 `7 @; B' L) w5 Y  G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % `( i0 P5 N! a: m& C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: Y7 p& q( e) C8 u8 F' Y) i0 `
2 Y. ~9 P! \: H
    CSR = 0x0000;
. t! ^) G. u: D6 H    INTC_INTMUX1 = 0x3d;
- Q$ |8 t; X: I& `' O    ISTP = (unsigned int)vectors;( S2 [( e7 i2 J* G
    ICR = 0xFFF0;  ; ^$ N9 y. }5 y  B" j# h0 f
    IER |= 0x12;  
5 M" |9 N; a) Q1 w7 g$ ?( d    CSR |= 0x01;  5 C/ a+ X. j/ p3 S- z5 P

! K7 q6 J+ X& A2 W* y* u; a: a; F9 v2 Q, c8 C# P
& r/ T2 @: x: R  |7 L% u  Y9 ^
还有就是两个输入输出函数:6 \/ ^/ M7 J3 V/ T- _
void output_sample(Int32 out_data)
. p8 `3 g+ p1 A7 j$ |{
. q' t: R' h, ?0 x% v  AIC31_data.uint = out_data;    h; Q" u: d0 z- X
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 G7 N& k4 |7 Y}; D: ]: K: t  f& O; b5 w

4 T/ [0 d$ b. vInt32 input_sample(void)- N2 N; ~' [+ S# L# e9 `
{  + g9 \$ t2 r! j; \6 ]# J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& n2 A$ U/ R6 m& R  return (AIC31_data.uint);
8 c/ S$ L, ]% `# X3 }4 [: N; Z}8 h) I' B6 J6 f6 {3 E4 B
6 s' {/ p0 E! ~
分享到:  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-12 23:12 , Processed in 0.040871 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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