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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 D. {2 N" a5 c& I, n1 Fmain文件:
: f4 w! M( s+ ^2 P3 ~interrupt void interrupt4(void)  + Q3 v# D1 m: @2 h, X, p
{# Q3 j8 e. s& w" O
  Uint32 sample;
6 t$ x! I' b! t4 `4 j9 @. e6 V' N" s! H+ B
  sample = input_sample(); // read L + R samples from ADC" v3 q0 }4 D& N$ {5 c8 |
  output_sample(sample);   // write L + R samples to DAC
. |1 m/ E, H: l  C+ O4 ^  return;0 D6 w7 F, y" W/ S; f" V
}
7 o$ @2 `( ?  E8 J
1 P0 J+ R1 |) |( ]% u% {5 F- Yint main( void )
+ e4 {0 d( k3 ^* U{. d& x, ]: N" F; o$ k$ d

% r; b; S5 K  [# `! K! \    /* Initialize BSL */; I/ f$ {. s4 s( k. A' B
    EVMC6747_init( );
, k2 ]% F; k3 l# H3 \; ^2 z- C        /* Call evmc6747_intr function */* o. s: S) {+ H+ I! S0 X9 K
    aic3106_init( );* N. V- ?6 p3 q
        while(1);0 c! n) _. a- x
}$ H6 t) B' s% f5 s# S
+ T" h  V6 V% g* F' i2 B. n

) S+ z& z# I9 z& R- zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' X; `' l1 a1 }& s
/* Initialize MCASP1 */" Y( O! q; N( d7 F2 ^" D
    mcasp = &MCASP_MODULE_1;* r9 M% x2 r  N- h
    mcasp->regs->GBLCTL  = 0;       // Reset( }$ G9 v1 L& b! b
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 f/ v6 n$ ?3 X* E    mcasp->regs->XGBLCTL = 0;       // Reset TX
# N* M: a0 |& F    mcasp->regs->PWRDEMU = 1;       // Free-running- ~. e4 T1 i) ?1 X  x
   // configure McASP0 receive registers) s$ h% U7 |! n9 x( V( Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 C0 L+ b: J* s, }$ u6 z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- @; Y/ R+ |  E" w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 i( \( Z( j) d- p7 ?! \5 X    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ M* j& @: G2 v4 S8 y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) o( |  C( l* @0 L- ?+ n. ~3 Q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( D/ q" E. h5 F2 G' i- I    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- R6 y! H3 @0 ^+ X; j3 m    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 W/ i# y& N" J$ K( }! M7 k
  y1 k5 h' c: G- g4 N" w    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# ?+ F- ^' y, {/ H( L7 e
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 [' f. D2 s& a% K
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) j6 ~4 G$ t( m2 _. O% F: k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 a  S& D1 E3 i) V: l- |2 @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; l5 H3 {7 V2 G7 _/ U& o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 b. D7 X5 I9 l' M    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 O: O. K1 H* g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( j0 b; \* ]2 y3 D% l+ z

  j4 D& F1 I& F% g' D    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" a1 e5 `/ a( C. J5 h/ v
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# l  h! q3 x1 h8 Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs( X( z. \/ m; n
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) u. I) P# [8 O4 K& f" M# `4 `
$ m, C, C' @2 u! h# l6 w' Z1 [
    mcasp->regs->DITCTL     = 0x00000000; // Not used" ?+ D: _+ B& I" e
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 \( u  z$ K( p2 S" [) h! }5 `    mcasp->regs->AMUTE      = 0x00000000; // Not used5 ^1 x# N4 |# K- _/ j4 Y
: F5 O2 B0 s0 |: ^1 C4 l
/* Starting sections of the McASP*/$ Q$ I) n2 Y2 H& R
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! Z: W, J, v9 \" Q* E& n" z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ [/ ?' @( f1 h' K" k* g    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, P& e1 y! u1 g/ ?% t- s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* d9 ]# Y- v# O$ C" O- t5 O. Y

$ ]7 Z# N" _% q6 C6 p" y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - b! }1 r( J1 ?( C' L- |( b3 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 S0 M2 D8 p1 T. `4 t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - S. E0 l' r& S8 d5 C1 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 ^, b- l2 a6 j, s5 }
  ^. M4 Z& S0 d- T  j
    mcasp->regs->XSTAT = 0x0000ffff;
- |2 W) [4 ?$ k# h: U    mcasp->regs->RSTAT = 0x0000ffff;
9 y$ U1 t0 b0 h/ c3 O1 [& W* J9 ~% ~7 X5 f( }
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& J4 P# f. `- R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- D: f6 t! l, u4 q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& ]! F" W) o: q, z( X& a8 q( G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 [. e  S8 u2 K, \' R
/ I9 n' P9 n) ?9 o2 n
    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ }8 E# W% y% Y+ c9 ]3 Q- R! N    mcasp->regs->XBUF5 = 0;+ X7 n* F; E' j4 d, S& a
    mcasp->regs->RBUF0 = 0;
) {6 O9 @1 |: D. z( U5 y1 m, \# X7 j' u/ W
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, ^5 Y5 t# D, b5 J& J7 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: d& k& r% ^; \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- u9 Y0 Z- A0 k! f6 U7 u" ^6 c! g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' @1 y5 n! D2 \: i& l) L
5 b4 |8 ?8 E' d    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 y+ m% P, d. {& Y8 _* C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& ?" f0 M4 v! B( c; s" Z* z7 v
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( o7 u# y. k9 _7 ], s8 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ C( B! l* q3 y& l+ C
8 @0 }7 S; e( b* [. [. J    CSR = 0x0000;
; ~' [. @. p1 w2 R; Z    INTC_INTMUX1 = 0x3d;
8 ]) d. V7 ], u8 q    ISTP = (unsigned int)vectors;
, w2 W2 G: E2 g0 R    ICR = 0xFFF0;  
* u7 C9 I7 |; g    IER |= 0x12;  
$ w& P. z) I; B1 W+ e0 W    CSR |= 0x01;  
! ^$ h0 ?/ @) A6 n
6 s: y' V& q7 t; n0 u; v$ q( B6 K8 p, Q, f. s8 ]+ m# ]: b0 q0 ?  [* G

! D( }8 m0 V* l& f还有就是两个输入输出函数:- {- Z" G# v( L+ c8 `0 q1 n4 f
void output_sample(Int32 out_data)
! d+ C1 f5 y. Q0 \{+ H$ w, F! q: L) P; E# Q
  AIC31_data.uint = out_data;  ( ^& u. b+ ^+ A" g$ ]3 a% d
  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ i9 a2 m, D5 Q! t1 z
}9 X* r0 L1 W* J7 y8 n8 J- D; t

/ w3 n3 |! R+ |1 r" FInt32 input_sample(void). I3 N3 I0 d' U$ R9 z7 t; [
{  
8 K' u; S& }: P6 e. Y% j$ Z3 u  AIC31_data.uint = MCASP1_RBUF0_32BIT;! K: a- m; m+ J$ o4 }3 \3 e0 a
  return (AIC31_data.uint);, L: `2 [) C/ K
}( I8 p8 B/ h- Z# B$ r; z" S& s
) E1 d! p/ _4 [7 N% D9 N* H
分享到:  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-11-7 11:04 , Processed in 0.040495 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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