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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  f9 [! z9 }# g% A, y. Mmain文件:# l& i4 l. h, ^% M) O0 S
interrupt void interrupt4(void)  
6 r2 m7 Y  v% K9 \1 u{
& H9 h" E0 J6 ]. K0 ^  Uint32 sample;  e7 s8 F) s$ p+ F8 o
, y+ W; q( S2 E  H6 y
  sample = input_sample(); // read L + R samples from ADC  e5 {3 i/ \* j, Z
  output_sample(sample);   // write L + R samples to DAC
7 H7 V: i. X3 X- D; f4 P8 x  return;3 q2 G& T! ?# H
}
8 K% s, J# W8 S- X$ D1 U7 G( u; p* h! [+ J8 }
int main( void )
$ C+ L7 m- W# _1 A# o{
2 C# E8 l; K) N$ i! M  Z
/ T, B) g: j8 r$ P: F% |# _2 p    /* Initialize BSL */
7 w8 x1 O! B9 ]- ]( q    EVMC6747_init( );& s  u0 [3 K  K$ a5 M
        /* Call evmc6747_intr function */( m5 O, {9 q/ w& d0 l
    aic3106_init( );
+ C7 N3 n4 t2 f$ d4 E& |        while(1);6 u' P5 |1 A* Z, k/ }+ b: Y5 K$ q/ n
}/ E: u6 [- Q3 S9 {) i* R# |
6 U  n1 d5 T! i! j
- ^1 G. h4 w" |/ l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. q0 ]7 i- g+ Q; S0 O9 s
/* Initialize MCASP1 */
2 q3 [0 V' ~; r* G) b* |    mcasp = &MCASP_MODULE_1;
' V  G2 V, a; X& d0 @4 b: ?& m- _    mcasp->regs->GBLCTL  = 0;       // Reset+ W* V/ @+ Z7 o: F( N& j+ r4 ^0 y
    mcasp->regs->RGBLCTL = 0;       // Reset RX9 b# A" {" S" S2 z  k  S
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# S1 N# K% q$ v' b; v: @1 U    mcasp->regs->PWRDEMU = 1;       // Free-running
, [2 G' y( p8 I" U5 r; U7 h6 x$ S   // configure McASP0 receive registers
  }" K2 n! v# [$ q/ a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ d% L( [- u& ~+ A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) U/ S4 c+ U6 {  w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 [+ o: S$ u" ^2 j% [8 t' |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: G6 J! \( L' O' O6 a) u5 P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 {* t1 U, C4 D1 v( R6 z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 s+ y" l& t0 x$ x! _# a8 r    mcasp->regs->RINTCTL    = 0x00000000; // Not used; A! a  [2 R- T
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 T2 ?% D9 G4 N0 I0 z

! ~& m: }4 o& M% S5 @4 f' h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, z( Z) O5 {# \0 _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) `) z% l3 s/ v+ b: T    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 d" O; o3 P! B% l( G9 L; @& k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" p$ [% }0 g7 V# R; H$ r- \
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 ~* B: S. g- s, n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! a, j% ?. @( G( {% N0 n    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" |" R; h5 I& l, a5 o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 e1 P& y6 Q0 j

0 m. ?0 y% M8 r  d3 n! m( ], ?    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) \1 v6 \5 J+ S7 |! H& q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 U5 s" A" M9 c) h: q' d3 v% b8 e    mcasp->regs->PFUNC      = 0;          // All MCASPs- H% G% P  Y# S& _  A8 J& C* S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 L, n) f; F2 J  F

- j' o8 l' R- |: K9 q9 ^* ], S; v' U    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ K# H4 @, \  \9 M' M; {" r    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" J0 V* U4 Q3 d    mcasp->regs->AMUTE      = 0x00000000; // Not used- j! _. u; C- ~/ R
+ {" y' ?' \1 [% v
/* Starting sections of the McASP*/
& l0 _0 Q: h9 {8 x. x# s0 Y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 v- o+ J* T  R0 `$ N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 p1 \4 V  \" C2 h6 }    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 k: x  ~3 r" [5 V2 X) \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 M4 {8 d/ O+ ^$ W
; c* T& z9 v( d" P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 p. C1 O+ P9 v0 `- J* \6 m  z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 M: p+ u. w3 i+ Y; Z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 J; i' [2 }0 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  h2 y  W( C) A0 _- l
2 w6 O2 P" p7 U
    mcasp->regs->XSTAT = 0x0000ffff; + W7 H7 P: ]1 c/ k0 A' s( o
    mcasp->regs->RSTAT = 0x0000ffff;
: A* H1 j; _$ b* i. n6 K1 r+ X- N" n8 V3 N% v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 \7 X) Y* y# c  I, S; \9 d; r  I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ R6 a; Q' x  |$ i    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : r8 d9 }. n0 Q, \6 U* h9 ~" \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 X$ e8 g) G6 Y7 Z- L8 e' p" K  b
    /* Write a 0, so that no underrun occurs after releasing the state machine */; ?6 ]( e4 p0 g% y+ S# C  I9 `
    mcasp->regs->XBUF5 = 0;
6 }* _2 B9 i) Q8 h" [4 Z" ]+ H: K; U    mcasp->regs->RBUF0 = 0;
" n- U: I+ b& @: |/ N: ~+ i
0 \0 p1 H  D+ y' [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - K5 w) [) e0 u/ H1 w2 L3 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! `5 o. T6 U0 k    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; z; y. a2 I; R. Y) c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. ]: V5 R5 L/ Z6 [

2 _* t$ y3 ]6 ^, D' x: J    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   [" e" A$ ]/ A5 F9 ~1 N: H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 u) b9 F0 C/ u0 g4 v8 a' j    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # r" |. Q6 Q# F! }1 V4 {  |$ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# y4 O* o* s: O8 ~
7 W2 y  T, P# @) I8 v! r/ n$ R    CSR = 0x0000;
* S" M) e0 C+ `7 P% X    INTC_INTMUX1 = 0x3d;# l$ W8 m9 C0 x' h. m0 q; }
    ISTP = (unsigned int)vectors;) m- g9 s; H8 d( z6 z; ?
    ICR = 0xFFF0;  
2 Y( O8 c8 }/ W% D/ T    IER |= 0x12;  
- P" S* X, r$ w7 V0 ?, q1 v9 y4 ]    CSR |= 0x01;  & v) U# z. ?# P: q: Z
: R- H9 _$ u" L8 |; Y

: E3 \$ |0 E) t6 w! C
5 ?  {; S( b* h4 {  p还有就是两个输入输出函数:+ e( G* l+ s9 E* r- r8 u
void output_sample(Int32 out_data)6 L, L2 a+ _: @9 R$ o  ~! ]
{
$ x5 O* L  [; l( G0 R  AIC31_data.uint = out_data;  ' f; z! D& S  B3 e# v2 K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;% P2 u4 v. L" x3 Q; M3 P
}. X+ y$ e+ @  q2 g& E; |. B) e

9 B5 H2 j# g- s! I4 b; v2 OInt32 input_sample(void)% H/ x( c& J8 ^+ U- t' A. c! a7 j
{  
7 g* M8 o# W- r  X* i- _  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 d( v" G" ?' [: e/ M. a  return (AIC31_data.uint);" ?) z7 R5 z: e# N7 \  t$ i
}# r- L; z7 V3 a
# b; T0 ]# J9 d- {5 m
分享到:  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-30 20:37 , Processed in 0.049586 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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