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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% E* _: z7 _, y2 I3 }
main文件:
( e$ l# R2 S( N2 q( ninterrupt void interrupt4(void)  + I2 H  h1 K, Z
{- j& P( p: w, l+ c9 C
  Uint32 sample;
/ v) O  A4 _3 ?) I# `8 P- T
; V( D' Z- @% K+ u  sample = input_sample(); // read L + R samples from ADC
. R3 |% ?+ |/ y4 i* L: w) [  output_sample(sample);   // write L + R samples to DAC : q- ~$ K8 @* Z
  return;/ r7 Z1 L' C( p) o: O
}$ d+ Z9 o% K' ]! C/ h2 l& A
- M  K8 w5 t, i0 F9 C
int main( void )1 `. d- [  _) Z- U
{! V$ H- }3 a0 j$ o- k* k( Q

! L- w: G& W$ c6 @& _9 g    /* Initialize BSL */: m# ]2 R% O7 T6 T
    EVMC6747_init( );
0 A4 n- p- o5 c8 L% O" B        /* Call evmc6747_intr function */
3 \, E8 o9 D" Q% U  r2 c6 ?    aic3106_init( );6 H' G. e/ i/ r4 [$ D  b/ `( Y
        while(1);
: s1 X+ ?& G; D0 j  V}
7 o0 A/ p, Z# h9 Z2 A8 ?; I: X- k7 r& x3 p9 x8 T4 G7 M
. B! u, u! I& y! t( b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. v) Z) b' J3 u
/* Initialize MCASP1 */
$ A$ Y4 {: n9 x/ n+ A    mcasp = &MCASP_MODULE_1;
, [# G; M0 b- j" [    mcasp->regs->GBLCTL  = 0;       // Reset3 ~- ~8 y3 J/ l2 ?
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 V5 Z7 ^, _# r    mcasp->regs->XGBLCTL = 0;       // Reset TX' _  t; A0 G% y; r* y
    mcasp->regs->PWRDEMU = 1;       // Free-running
& D  f7 V3 _5 s$ p1 I# K+ `* F   // configure McASP0 receive registers
$ U) G1 M' j) c( x& U8 x1 M# h    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, `4 V5 c* x) f& }' [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( x' W1 F7 P" R. q6 x0 B9 d" a    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. C' Q1 u( _2 s5 C& U/ _    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 q0 [( ^  w- s* h/ L( T    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ G  q% l, ]4 k. L3 C+ Z' l" E0 T/ o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  o' Q7 _4 F( P    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& I5 ?3 ~1 T! [    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. G, c, C( Z* Y" Q( l1 H2 {7 X! c1 J. u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
2 I7 `' \( ?6 I( n    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 t4 i) L4 Q- }8 i9 u0 B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ `- {6 F; D( B9 h6 N9 i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) ?6 q2 R1 j( ~" z( z2 Z8 ^' v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 M4 E0 @: b' n& a3 X- ?5 W* Z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 D: o) b4 P9 H/ K  u& J& h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- z. A, E' q2 \/ X0 U    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 G( }. \; N3 t7 H' U. J' f
  b% W: E. o5 j4 h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 T3 z; c% Y! i" y9 A  J# }
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 ^! D" z' I1 C8 ]4 R3 K) E5 b
    mcasp->regs->PFUNC      = 0;          // All MCASPs
: \- r) B: k* h& Q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. B8 J* o& w" E% B. L  m0 y& t1 o& H* Y) O. H1 w6 ?0 r' `2 s
    mcasp->regs->DITCTL     = 0x00000000; // Not used# S2 I3 b: Y: |" w* M0 O$ b
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! B9 |9 [6 j; s7 r, P    mcasp->regs->AMUTE      = 0x00000000; // Not used7 j6 N6 K/ i1 o# z
6 }. z; u* ~  f! K/ p- ~7 E
/* Starting sections of the McASP*/! u& ?1 X& i* U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - x4 x4 R( n8 G3 O7 p/ n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 Q: U/ Y4 |, Z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " d9 F# f  K3 R, O3 T% p2 d5 g4 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% ~) A; @2 @, [8 p" d; o! N
2 a! V7 n* J% L( O2 ]  D    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) m/ O+ d- `9 m+ o2 |0 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 b) J8 P# o9 k    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 ?% a8 J! b8 i0 K3 |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 b9 S  ?' _$ _
6 x0 u3 [; p6 V. N' p1 l- Y    mcasp->regs->XSTAT = 0x0000ffff;
# l9 i/ [% U* E  Q$ I    mcasp->regs->RSTAT = 0x0000ffff; , b, p: X8 t5 |; y) R
! U3 A9 h! W+ j1 z( l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ w8 ?1 a) d7 G' b* A7 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% e* D! H4 s$ H% T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 S  S$ s6 j6 n# _+ x  t3 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 E; v' Q9 c( y1 X5 H$ q+ U: p: A* o/ I
    /* Write a 0, so that no underrun occurs after releasing the state machine */; t! H( m% i) ^3 f
    mcasp->regs->XBUF5 = 0;
! J8 K% w0 q, C& O0 d% y    mcasp->regs->RBUF0 = 0;
& ]0 I4 K: y/ j# u' {3 n% N6 T9 }; t: {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # b5 P& U2 f# K) w7 Z/ l  ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. B( l! x: e5 `3 M: Q1 h% D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 [- e" |' V0 p. z, ^* A. ^% g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 t: {6 z; K3 B) c8 n: _4 y: Q/ y: `- S: {# N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 ~8 O5 K: R+ M( ]! E; ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& R3 o/ r4 S1 k- O/ j% ^& [4 `8 G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; K7 f7 b% G6 R/ X+ }% o0 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: g( [$ L! P5 }* J
2 s/ I" N9 e8 d& J
    CSR = 0x0000;/ _6 m# i! w; O, e5 R" Z
    INTC_INTMUX1 = 0x3d;
: W  {( N  T" l3 P    ISTP = (unsigned int)vectors;6 A  y& D8 O2 J4 \/ N: D
    ICR = 0xFFF0;  * @# G! }% |" l" l0 _9 u" F, m' e- k: d
    IER |= 0x12;  
/ {- L5 l$ }2 W. w    CSR |= 0x01;  
* _. p- O) K: W- |8 \7 c5 T2 Y7 v- U. J( V5 k: G

( f! G  K+ Z2 D0 X, M4 `& q
# r# o; n; t, C! T! B/ ]7 t' A还有就是两个输入输出函数:
* o& h# s$ B) b+ A6 Jvoid output_sample(Int32 out_data)7 x9 V# j1 F& I/ i, n
{
( f% F( C( J- A/ I  AIC31_data.uint = out_data;  
+ H6 Q) w# t0 b  M7 x  MCASP1_XBUF5_32BIT = AIC31_data.uint;) s! f% M# e; [
}
, G+ P, [5 ~* y: L$ W
7 r/ |& X* r8 S$ c  I+ |' ~Int32 input_sample(void)
$ X; L8 N4 L8 m0 b7 `) Z6 x{  
- m' G- T' J  K3 s  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 p" k) g' O1 r3 [1 u. M0 D5 l8 B
  return (AIC31_data.uint);+ c6 y# S/ G: G' P$ o$ ~/ r% G
}! g+ M# O( Z4 S: K

# v3 s5 V0 o: d
分享到:  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-9 16:52 , Processed in 0.038692 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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