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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: \: a: o4 |3 hmain文件:
, m+ g: k1 _( [+ vinterrupt void interrupt4(void)  
2 A- @9 U8 @; \- Y{
# R: W( v5 c) _8 c% `- ~  Uint32 sample;# S- Y5 b* E7 Z' }: [$ p0 W

  `6 S0 K+ h5 X$ T4 X3 \  sample = input_sample(); // read L + R samples from ADC$ n$ a* h3 j$ k4 v  E
  output_sample(sample);   // write L + R samples to DAC - z, W9 r8 W, }1 k8 r
  return;3 `' b0 g, `; t) o. t) p
}2 M. l( w1 W# M( o% j

$ N' U+ F4 V' T6 _  C& d3 \int main( void )
7 Y2 k: `  M/ K, G  F{
6 r# z# _- V, }* M! [. a  ^2 A& n9 N. K( s, z4 F( Y" r
    /* Initialize BSL */
; j2 y$ @2 u" F1 B3 n7 A, r    EVMC6747_init( );
' P1 A2 _8 d8 A3 H# j- i        /* Call evmc6747_intr function */
6 n1 e2 |+ @/ f) z. _- [    aic3106_init( );: L, p+ u9 @4 I6 D( g( X2 L
        while(1);% Q9 F, P* `9 k+ S$ M; x
}1 i8 ]* D# {; m5 u. g0 R
6 y1 {6 h5 l0 ~3 m1 d1 e/ M# A
% ]7 t0 r8 R9 i2 \3 }" e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- v9 M; p' Z4 q9 A" k9 W0 D2 m
/* Initialize MCASP1 */
7 `! i0 {! o7 U! l# G1 p0 W+ c    mcasp = &MCASP_MODULE_1;
$ v$ O- c* g% z4 ^" J    mcasp->regs->GBLCTL  = 0;       // Reset. Q6 u7 i, Z# Y* _3 q0 j
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 @9 z3 a9 E2 m$ }" A" D3 q7 X4 _8 f    mcasp->regs->XGBLCTL = 0;       // Reset TX) }% T: P  f4 ^1 O; a
    mcasp->regs->PWRDEMU = 1;       // Free-running
( N3 l$ ^% U0 Y' p) q3 t" U   // configure McASP0 receive registers( `- L+ M' p. ]
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) ~* S2 L0 j0 @. b- v    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; V9 ~! z+ _- M8 T, |
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 O9 i! j2 k/ Q2 Z/ R$ D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 |6 j! c! o: W+ k
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). L2 D. ^. [2 K
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; R5 z3 B: u8 ?2 x
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; t3 \2 a. i5 |  w* Y- D0 X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 ^+ L) q, d/ W7 m7 p4 s" ~$ P4 G" h

; g/ k' L# i! @4 A6 C% ]    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* N% W$ L8 Y" z- T* a    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' Q6 ?3 g- v. N; ?
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. z. {2 i) Z( _( ?. S" S) [0 I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- |8 V/ O& D# H6 e, |4 L5 L/ l9 c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& i: Z- q$ g8 Q6 }1 z$ T7 t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ g; `4 ], |8 }' d" L. w6 H+ S) \    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ O" f: h7 f1 B& @& f, V    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, I* n0 b6 `7 _2 J* H( [  O
2 O# n& }4 H& Z# K    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 @3 h0 p# y  z5 h  H    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; B8 m7 B6 G0 w8 Z6 H    mcasp->regs->PFUNC      = 0;          // All MCASPs
: w% ]5 S! D' t; l9 |) O    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 {# i( h" T# X
+ H, k% Z, A- v4 a9 a" u0 q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
, f7 N) z# i$ V    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ W5 n  G$ r  K% R7 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 Z/ T) d# o+ o  b

. h& _) n: _2 c6 F6 }, a, u/* Starting sections of the McASP*/
) j& I6 G( e- O7 S, w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; O6 i: ~6 ?6 X+ S2 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 L2 ?0 m% n( D- f* `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : Y- I* M# d( k5 [# n' d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 A/ O) u" d0 o$ P( i
/ M8 B* U: A; F8 F3 N
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 \, ], V' \, o) _* Z  B  t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. ^3 h  A' O/ W* v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  A& ?9 l" ]' M- a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) [( W; m9 `# K
& J" b0 b0 T& u0 @
    mcasp->regs->XSTAT = 0x0000ffff; & V0 K7 C! J. A: P' N
    mcasp->regs->RSTAT = 0x0000ffff; & h4 A7 P/ @4 F. A. U8 I! W

0 k1 W9 w! }( P! v2 c6 L    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 }6 t! A/ w9 [! y1 I3 i! J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 w/ s1 h2 i+ ^7 x0 J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 B. I' o8 Z5 M9 ?4 B2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' f0 w$ b7 W4 U: r% y. D
& ~+ M0 }% B; q8 S. R$ j
    /* Write a 0, so that no underrun occurs after releasing the state machine */7 W* H2 n' \2 Z3 L3 U- V! q  Y
    mcasp->regs->XBUF5 = 0;
+ Z# `: e: M; d3 |+ C- r6 `: p    mcasp->regs->RBUF0 = 0;" J3 G4 l7 W9 d! U6 V

! r+ ~$ Z$ L/ L4 g    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ F' k8 _" w. k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- ?7 Y0 b1 H0 [  m" T1 u0 X8 A
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * H# h( K6 N: @  C, N( C6 o2 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 L( z8 T5 W# v7 G

& Q6 U, T0 ^( d    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 U0 @# a* @% Y* Y9 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  C! A% L* _. {7 ?9 J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: F9 C4 {; y8 n8 F1 G; @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! u7 s8 m2 W4 B% w: K! e/ x: a

, r* x& A. C/ g# U, \2 x    CSR = 0x0000;
' _5 h* j/ ?0 p4 \$ Y- r: @2 i% S    INTC_INTMUX1 = 0x3d;
; P; Y- O$ Y" |    ISTP = (unsigned int)vectors;0 M1 [8 @8 V, j' X
    ICR = 0xFFF0;  
! A  n8 y. o! x& a$ o/ K! _# X. t    IER |= 0x12;  - q+ y( @  X" {' ~1 M( D  t
    CSR |= 0x01;  
, g/ A8 `( p9 r  ~& A" q5 I+ e5 K/ I2 C' x' A# F

) ~. D0 c% Q8 |
  Y7 i& L& L3 T$ |7 a还有就是两个输入输出函数:
  ?- S% B1 v4 f- _3 Avoid output_sample(Int32 out_data)1 u8 U' B+ i; V0 m
{) ?, R/ ?2 p7 V; w  m4 Y
  AIC31_data.uint = out_data;  
! O: P6 |/ M  y) e8 S# e9 X4 L  L  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 `, o* K; p9 t6 L& z) n}: A  r) N8 B) @) o. _9 v  d& g
- Y3 C$ }! G1 O& ~: @
Int32 input_sample(void)
; p% o6 n5 H* I4 J* D: e0 Y/ P{  
- b" P! ^. f2 q1 b5 m7 W  AIC31_data.uint = MCASP1_RBUF0_32BIT;% m% T0 e. H+ R/ S
  return (AIC31_data.uint);. G1 l$ U# V3 V
}
7 U4 {, ?4 d& y2 `$ E3 x$ E: v9 \$ j
分享到:  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-29 05:33 , Processed in 0.043113 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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