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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 h, }& m7 N3 E: O
main文件:, _$ A6 ?/ M! D3 j
interrupt void interrupt4(void)  % y4 C$ w+ U! H6 K
{
/ n, h! X, O4 z  Uint32 sample;$ z$ x0 a' x2 ]0 r0 j

, ^6 d9 u5 R% H# c  sample = input_sample(); // read L + R samples from ADC# n2 N& V8 q% b
  output_sample(sample);   // write L + R samples to DAC
7 J4 F+ h- Z) `0 @1 f+ J  return;
* y+ A1 Z* `/ E, `4 G; x}; n" c0 c  z3 w$ L( K0 o( Y

& D& O. Y, s6 E0 Vint main( void )$ X& |( N  }! U4 `5 P
{" j! X" ?1 H: _" K

  S; [- o6 n6 h8 ]/ w9 s7 X    /* Initialize BSL */
6 X& V$ [8 M8 ^' B) B8 ~/ o    EVMC6747_init( );* Q$ ]5 h" S, H  ^% m
        /* Call evmc6747_intr function */
* N) x* [8 t, o! [& _4 G    aic3106_init( );
( B3 P( R& T: d/ K/ _; X+ F# l7 G$ O        while(1);, q# U) N: n! T7 w7 n5 c
}
! H* C, q; B8 f: z9 F' r
' }3 [  ]0 _2 q3 q9 u( T. |1 X$ D" a1 F4 e2 @6 Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, f8 V0 M- |. B7 R
/* Initialize MCASP1 */
% @) k2 V' u0 e( ]9 ]4 V    mcasp = &MCASP_MODULE_1;  ]& q5 K1 m5 R4 `
    mcasp->regs->GBLCTL  = 0;       // Reset; o# W) |' K, g0 z6 ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 o  D& G: c* _- {) c
    mcasp->regs->XGBLCTL = 0;       // Reset TX" R9 F( Y4 M8 j* g# U0 g9 S; P
    mcasp->regs->PWRDEMU = 1;       // Free-running
) ]/ O4 l5 K4 B6 z1 C! s   // configure McASP0 receive registers
& D1 s! I7 J$ I3 A& R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( M: b; C5 j, ?1 K: [9 l( F+ _    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' I9 f. t4 r  P; u/ q5 V$ I+ o( ]    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 Y$ _" J5 j: d" \1 Z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 V4 p( E' K7 v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 a2 [% @& S4 n1 V& o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( L, ?2 v9 i# p1 W7 `  ^
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, T0 m6 L$ p3 q+ _7 Q" p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 t9 P* D# P6 _
2 |) V9 i! b6 i/ y, Q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- v/ S- t) w! l, |( B# X+ I7 i
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" k6 D' j3 a5 `3 V% j6 p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ N& C( D" C4 o$ S
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 ?" X' m8 \1 c+ `: J" X
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" W; _$ o: v0 N9 s" V1 g    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 z" o  i* ^4 _# a3 z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 Q" f) [  a, e$ e
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 {  c  h9 K0 N3 c2 J( P- r' g9 s/ }& F

+ B2 R" E- A7 K% r0 A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- k7 ~6 K$ y6 m- f6 r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ M! ~( [* V8 P7 O
    mcasp->regs->PFUNC      = 0;          // All MCASPs' s6 R3 v. V! m/ M3 s( U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 g" k6 j  K  J, U9 C( h  |

/ h* r( v9 Y  p    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ n( x) g  Z* j- O3 f1 I    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" t$ v6 U; I9 ~4 D    mcasp->regs->AMUTE      = 0x00000000; // Not used, t/ X. M0 N% a" m7 w
: G' c( ?5 q4 y( L% w
/* Starting sections of the McASP*/
$ F6 K2 I" j; }0 X8 y: B6 p    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ R; g/ y2 D) c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! v! O. M* T' n; l9 q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   l8 R" j% o' v" |7 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& ^* U4 z" i6 W

  c$ h+ J' v5 C5 }    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 ^/ I; G9 n. {1 C+ f/ L# J0 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( P5 h" T1 Z+ y( n    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 J' K/ b! g$ N5 X1 \+ P6 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( y9 J, `+ d! d. `
* ]/ i9 G# K7 N: w( F  Z. J( ^
    mcasp->regs->XSTAT = 0x0000ffff; * b8 w' D, v+ d8 W
    mcasp->regs->RSTAT = 0x0000ffff; : ^& r$ O6 n$ M: S  H5 ?

7 n4 b0 c0 D$ ^) A, n    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. o9 F; x% b/ p1 I  f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& J: t5 p5 a% N& Y0 {/ V* Z# ?* q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, f, l; U: c) W  i6 e+ M6 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* {3 H; a2 g4 R$ w5 j: x! C: c! [  g3 }+ @& S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
& b0 O$ t' J. a% d& @    mcasp->regs->XBUF5 = 0;3 F4 C$ f1 X5 B4 ]# q: S% T
    mcasp->regs->RBUF0 = 0;; a% D1 }: z% Z% d- J

" P' b# u  a; ~    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 z3 p4 l' D  i$ _7 z. w: n& @5 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  e2 {$ c" V7 p# C; u  h& X: z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  Y; [4 ^  U" V/ u; v, L/ }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. |$ J1 K0 {- w
9 s' z4 {% u' D; ]& y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, R8 w% p3 l# i( O1 i9 _% S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* n7 Y* T# w* l- R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! V  `+ w4 r/ l6 k& H. M- Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ {$ }% x9 X+ O+ c
; x" I* [$ R8 b) }, [    CSR = 0x0000;
  {& X8 P7 x, R/ z    INTC_INTMUX1 = 0x3d;
: o& S0 Q2 U, s" P/ B0 }& G4 n+ ?    ISTP = (unsigned int)vectors;7 P. o, t0 r1 D' d8 S
    ICR = 0xFFF0;  " `# C  @, f5 _4 h5 v) I
    IER |= 0x12;  
: P: x4 o$ F5 U4 ?% O    CSR |= 0x01;  
- D2 N' j! [9 T( z; {! e
; ^, ~3 Y8 t  d0 E
' O  W6 L/ u5 D7 }  G/ K+ O, Z6 J/ K9 B7 i+ \% F8 B
还有就是两个输入输出函数:  i% C( h2 R8 T4 e# M
void output_sample(Int32 out_data), I% l. R' `. u4 h  E
{
0 m' h) B: J: N0 m6 }  AIC31_data.uint = out_data;  . E$ \/ q; P5 T6 G$ K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ A; O1 L/ ]! ~! L2 S* l+ c' D}5 W0 f" a( O! O1 V' c

* D1 g9 b$ |0 c4 v+ w. o3 EInt32 input_sample(void)8 y& M9 J! Q8 ?- g! D' C! P% [  K- x* ]
{  
9 ], K0 l0 K! j6 f  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 e& l: U/ H) e7 ~
  return (AIC31_data.uint);2 j9 B. P2 n* W% |
}
4 t. N& \, t5 J( T1 w+ j; k* ^
. F+ m8 J: |* 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-2-11 04:46 , Processed in 0.040059 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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