C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' P5 O' P$ H6 x1 X- @
main文件:- X* h2 s0 V' z& _( O5 g
interrupt void interrupt4(void)  
* B) c! c6 q5 k! a- E# ^  [4 c% K{
0 w2 V. u; \2 I4 D+ O  Uint32 sample;9 s, }- E' r1 E6 p5 Z: S( ~5 B
  I$ r4 P% Z7 g5 d& S
  sample = input_sample(); // read L + R samples from ADC
& M$ ?7 E* ?- L. ~  output_sample(sample);   // write L + R samples to DAC 2 K. @! v1 l0 Q* q
  return;
7 D, W5 [, n. Q# i* b% U4 \}2 u! L: d$ H7 Q/ I4 X& U

  [* z. y1 j3 z! _6 tint main( void )2 [& W) V7 z5 F! z& g
{+ q/ J6 {5 w2 {4 X+ ~* q9 g9 u
9 l1 n# a: \# j- R' W
    /* Initialize BSL */
; l# U5 L5 M& Z  o! O& d! w    EVMC6747_init( );
( a- O9 u6 Z2 ?8 O' b+ p        /* Call evmc6747_intr function */
# A' X; F9 C& Y& {/ ^( F: Y    aic3106_init( );
1 M/ M3 R6 T+ [% [! C7 [$ j4 l        while(1);
+ Q: h! A9 T8 ^  r2 l}
' C0 Q- Z8 k$ L0 \: g7 {. F9 ]3 [" |' s- Y2 j6 h

0 F7 |' h( k. u9 G$ t. ^! A6 Kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( C( k. W) G2 T4 U) _  \4 i/* Initialize MCASP1 */
4 i+ A5 C( A9 i3 Z7 z    mcasp = &MCASP_MODULE_1;7 X; ?% a+ y, a$ _. ]' ^
    mcasp->regs->GBLCTL  = 0;       // Reset
% J8 P& q% k4 e& t# ^    mcasp->regs->RGBLCTL = 0;       // Reset RX
# a. L/ t- u' V    mcasp->regs->XGBLCTL = 0;       // Reset TX
( I7 h0 q' g3 C. {/ g2 l# v' {% m    mcasp->regs->PWRDEMU = 1;       // Free-running
5 j# C1 t2 [) _6 Z% a4 P! f3 N* u   // configure McASP0 receive registers
* {6 ~  @5 N% t1 x5 K+ N; Y* _    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ D( C4 `8 Q# B- F
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& B8 L: ~* u% r2 J' i$ k7 E
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: k8 u1 [9 o- V: A    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  q& A# R/ x: q8 e; U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  Q3 O% A9 l( u6 v& F
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% w% p* A( E3 |+ Z, N    mcasp->regs->RINTCTL    = 0x00000000; // Not used) [" W& S- R: Z+ B* t7 e1 B, p3 |
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. u# [+ _7 h, j7 q
, m3 g( F; e: G1 R. \% k* f( q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% u& G1 m& O% @9 x
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 k3 Z: o( s+ g6 U0 o! d    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 w8 w: y3 ], [0 l" {1 J: v. }' ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& J3 Y5 v4 D) N9 n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 D$ \* k  r. {/ k! K" \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  ]# W# t* R6 `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. g( D) c3 u% h    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# m; p; _# E- ~  K3 R
3 x, z9 u( g) p6 O4 a- \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) D$ Q% N3 E/ x0 @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) ]) x6 k" @2 t3 D7 b7 D9 f+ a
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ s* Y- w, w/ a2 c
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 G/ ^( U* H8 N9 z7 J
! L2 Y2 Y/ T0 C. b9 M( `
    mcasp->regs->DITCTL     = 0x00000000; // Not used
. l# ~+ K7 u. B7 Y7 o% T; o    mcasp->regs->DLBCTL     = 0x00000000; // Not used" ~& M/ I$ I+ ]0 D) t* q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
" H0 b  I. j* P+ F& i" y
1 D+ a! i% W! L! y' _8 P/* Starting sections of the McASP*/
4 E9 [$ H/ v- A- G' t/ X    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 J' t" T/ h/ Y% e& P( i+ ^! f+ f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " s( g7 ?0 }' y- Z# s
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & i, l0 d, S  S: Y% b. Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  D& U7 D, c* Z$ @/ Q" D( g5 z

4 l/ q2 A4 E; I: F- k3 G    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 k( u4 l  E" i! u1 G0 B& J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 [8 D8 K6 X6 l" X* W" P* A% V) `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 C' t# b! Z! h0 l1 q7 I# i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  v8 c6 i* I. P, ?) c* u3 T+ t" Q& {/ `+ l3 g% P  ~; B
    mcasp->regs->XSTAT = 0x0000ffff;
9 ], ~8 b4 i& N5 Y+ a( _    mcasp->regs->RSTAT = 0x0000ffff; 2 n0 p; F9 m/ k, G
( Q' A" A, O1 A, e3 Z4 K
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' r; ^' s4 p  k. w# i* x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" X+ o! }0 p8 P0 v5 o. L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ k4 ~& A8 E; ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' n0 P8 n) S9 t7 L

, g) ~5 I: N6 G5 g    /* Write a 0, so that no underrun occurs after releasing the state machine */0 n3 a9 d9 g/ ~9 o) V1 s
    mcasp->regs->XBUF5 = 0;
) ?! j, Y8 z0 K    mcasp->regs->RBUF0 = 0;
9 ^* m0 w2 y4 A% k, f2 S$ S4 I% S( h3 \* D" c4 i
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 v1 K% _/ E6 M/ u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" ?0 K1 C8 W6 w+ G    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : v- f) e% |3 i, C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 M9 @  y( b  u9 B, i/ ]0 y- x( n
7 E' _- k+ F9 G0 a* r% A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* k' M+ B, p: L3 K- m+ b; H: b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. J+ E( Y6 e' O0 _- v; J2 u
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & D6 |* V4 d6 q5 \% o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# W7 F6 {8 p  h' C' O
) G0 y. Y, c1 y. `1 X; N4 |% H: k    CSR = 0x0000;9 v+ {3 a# `$ k; G; s) `
    INTC_INTMUX1 = 0x3d;
6 E8 D* P5 j* A, H2 ?% M- x    ISTP = (unsigned int)vectors;* i) M( T; e; O3 p9 b3 Q" \2 }
    ICR = 0xFFF0;  
7 l6 d5 z2 b$ z% P/ ^" K, x+ I1 o    IER |= 0x12;  
& `& B$ V) g, P! _4 O: z, y7 ~( ?    CSR |= 0x01;  + ^; Y: s: ~( q' M2 F1 `

6 ]& S; H* N7 f- y+ V' a1 ~+ Z+ b8 }9 a/ A' `
* i3 x3 D* h- d9 j
还有就是两个输入输出函数:
) k( V: R2 l5 n$ _, V% fvoid output_sample(Int32 out_data)
' U% l9 d! F- T4 t. y) k4 ~) `{
  |2 H$ h. ?% D  AIC31_data.uint = out_data;  : L* g8 @5 V$ h% k2 z. B; e6 }
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 Y0 p% i1 Z4 U3 w& v, }; R' [
}
4 F; }2 x3 X. \% L4 c- f# e9 u
2 r+ c' n% T' r7 O4 @3 pInt32 input_sample(void)* u- T& q( g1 f) I
{  5 }3 y/ f' C& i; p0 |: c8 O. B- _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( V; t5 o! y$ q/ z5 U# D* R% C
  return (AIC31_data.uint);
0 l+ t) C: f  {# g  m% L' D}$ R& e  `& W  l3 ?  L0 P) _

5 z  `0 G7 |0 R/ y: Q  h, n
分享到:  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, 2025-12-31 19:34 , Processed in 0.043770 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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