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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# r8 k3 D& i" v! k3 s8 ^; tmain文件:& f/ o. Y  G* e5 p
interrupt void interrupt4(void)  " s# e: N  P0 A9 G  e, ~
{
8 S- g: ~4 M2 l; E" B  Uint32 sample;3 ^2 e- ]( O; _( u7 Z- c  }/ o. j
+ x8 d5 X5 F; s! P9 y4 t
  sample = input_sample(); // read L + R samples from ADC
" w  g3 h; _, m5 @  output_sample(sample);   // write L + R samples to DAC 2 Q4 V: M: B9 O% p+ ~1 x8 w
  return;6 ~) U; n2 a3 T$ @
}7 L2 R5 M0 d5 Z8 S

" L  L  ^+ F4 h/ d2 f/ y! eint main( void )
) _3 a+ m. n; K{8 U* M4 A; _7 ~* j3 A3 L; q
- h2 k( u0 `- E  V
    /* Initialize BSL */! ]0 v8 Q0 l5 [8 ^$ R
    EVMC6747_init( );. J5 _" f: @" G5 r. t7 t4 s- [/ y
        /* Call evmc6747_intr function */
- [$ }  N; {# |7 Q+ W6 y: R" W    aic3106_init( );, }. N! r. w+ V" }: ^  F
        while(1);, u4 P( p7 P$ t, z+ `7 ~6 G
}
" Q1 C. z; [7 z2 ?3 J2 w# N( P+ Z. H6 Q4 _
5 }6 J' S, g0 w9 C  q9 P% E! p
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, q- F2 O) Z0 W% w9 J9 @8 ~) L4 b
/* Initialize MCASP1 */8 t! ?  K0 a1 E7 L. }
    mcasp = &MCASP_MODULE_1;2 R3 b& w. Z  |/ W8 O
    mcasp->regs->GBLCTL  = 0;       // Reset
* g2 }' G8 o1 ^' ^4 g) c) k    mcasp->regs->RGBLCTL = 0;       // Reset RX
% ^6 M+ L: _2 G9 A! H/ g    mcasp->regs->XGBLCTL = 0;       // Reset TX7 `: {& S. h, ?4 o
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 g5 H# E  ~5 e% d* |1 G1 N6 N   // configure McASP0 receive registers. m' L7 N0 E8 u" G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: [  u; C9 `8 ~+ B3 s- v1 i7 Y6 T0 @
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- E9 k- ^+ I- T. s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 y! ~0 {4 |3 J# g4 V    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! a  h. c8 B! t8 @  v8 b    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" r2 X( d/ U+ @: P5 E9 b% _
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, T. ~$ i* L/ j7 M    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 _& M( k: x. Z* |2 I- H8 I
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) u; X/ c6 \# w, B. j
6 n  r+ ^8 i6 ^# C6 f, L
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 N7 l, n+ l/ C* q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  j: F3 r9 z& t* I% }
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 R1 i; d' O! u. g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- x( B4 e( w3 X0 I# w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) u2 I# W" z8 l+ O" J- I  Z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! Y4 t# X+ H& e! b8 o6 H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ ^1 P$ N- u. r: X% g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 Q* j5 |" e" M2 {0 v$ ]: ~- D

& M, B  {9 @* q$ O* Z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ w# m" [  v/ Y  W    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 S4 L( o* q! D/ x$ r
    mcasp->regs->PFUNC      = 0;          // All MCASPs' O& `( R* K7 F/ q) L& Z: l/ d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
4 p" M; k4 Q1 p& ~, \
6 G* W2 P. L; @8 V$ a$ i  r2 [% x    mcasp->regs->DITCTL     = 0x00000000; // Not used
) W- z: @& A* ~. a: k7 N3 v, \    mcasp->regs->DLBCTL     = 0x00000000; // Not used" Q0 R. x4 t/ W9 ?
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% |+ g' [; _2 M6 m2 H
# ^9 W7 t2 r1 T% d8 K, O2 Y# m5 ]* _/* Starting sections of the McASP*/
: R) [9 K0 d. P, K" J! A+ g( f8 ^    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: M% @3 h* I. \0 \( ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 W# k! C( [* ^: P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 ^( {6 b% I( @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( h! `! ^& o, K% s2 [# G/ |" D; F2 a  K$ j: t) e% I8 L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! H6 \: ]9 j. e: l- A+ l# L5 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: l( e0 U: Z' x3 }! @( L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 s6 B! L2 H4 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' m- N6 e& g( P9 b9 j

/ ?9 Z) `7 u, e. y    mcasp->regs->XSTAT = 0x0000ffff; 9 v+ s8 r; n; x$ |/ O8 l
    mcasp->regs->RSTAT = 0x0000ffff; 5 _& E& ^; B4 g+ {# z: k2 X

8 t( D. D  e2 ]' c1 q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 [& Q' a( E. F: a9 C. m6 G2 z- E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) @: ~% e  |1 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 O5 `. k+ y0 u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: j6 N$ [( y& ^8 L7 l
* Y  O/ X( M' @$ g    /* Write a 0, so that no underrun occurs after releasing the state machine */
( `$ N3 d# u) F0 ~: s" O3 S" V% v    mcasp->regs->XBUF5 = 0;
* X9 R$ O: h2 B/ H* z    mcasp->regs->RBUF0 = 0;+ l( g( N6 Y& M# C9 q' v

1 s0 H8 a% y. ~8 t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , u! X! Q  j# G4 @4 }; a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: k" e0 u$ R' x3 F
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 H+ v% T, W5 [! T9 {) |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ^2 J9 ~8 t7 D8 i" O# c' n
: M/ @3 k4 c& {7 \" F$ F, E
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 v$ N- H5 S/ K* X' e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) i. g, }  r# X. S" ]    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  G2 f0 A" ~, S# k' Q8 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- [- Y$ J  f3 Q$ I! R# r5 `# ~, R
6 f0 z  r! `- I2 T. p7 h) i    CSR = 0x0000;0 {" F3 d( T9 m, Y: [
    INTC_INTMUX1 = 0x3d;7 e, M" E+ Q4 G0 A& C
    ISTP = (unsigned int)vectors;$ ?+ Z  V& O" R- y2 j5 ~+ {/ o
    ICR = 0xFFF0;  : d9 ]" \5 t2 x5 W+ W. L, y8 ?
    IER |= 0x12;  
# J" j, w1 [. Q    CSR |= 0x01;  . G. @4 t) X1 }. T# F5 o" a
; N; S  O/ i, X8 C, Z7 e; d* m

; f: P# O) |$ K% o8 R- U6 `
' x/ p: {- W' k+ V1 G; r- {还有就是两个输入输出函数:7 D) o! x# b5 d3 P
void output_sample(Int32 out_data)
5 {4 H/ W- K+ F) V. F{1 f1 L8 S/ L" Y" I
  AIC31_data.uint = out_data;  # v" a' q- b4 }* V  i7 v& ?0 j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 D- G1 T) G9 e+ Z}. n$ `8 O: A" H

1 H7 B" c& h) ^! ZInt32 input_sample(void)* {2 \8 H! z( p, ?# B! F
{  1 ]& ~. d/ h5 C3 x) x. J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 E7 C; ^6 N' V& K+ c# }
  return (AIC31_data.uint);
  |7 K/ H% @" s' D+ v" V( a1 z  U4 G}
* _; Y, e# j( [+ q9 M
  L) W9 ~$ Y5 Z/ q
分享到:  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-4-8 23:49 , Processed in 0.049502 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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