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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# H& K8 F6 M( @
main文件:
' f2 [! `2 E" O* sinterrupt void interrupt4(void)  
, G7 L# p5 v4 E5 F# j{( W0 M1 I% I& p( s
  Uint32 sample;9 Q' A& S3 e* t( o0 u1 B1 e+ J, Y
5 g7 y8 T/ y. K, Z0 ^
  sample = input_sample(); // read L + R samples from ADC
& O! |. O" D2 ?. d. o  output_sample(sample);   // write L + R samples to DAC
: q2 p0 Y2 W' Q" V+ O2 h  return;6 g; ?+ L' x8 O" ~: n& g' n
}
5 X. z) \  `7 N* j: l' S8 g' E! H, J; Y* ~; F4 f% a4 m
int main( void )
% C; i+ {6 w6 g4 Y+ J+ U9 k/ _; ?{
( D* @- L; Q# ]+ h$ X; X* J4 _. ?! M4 C7 a, M
    /* Initialize BSL */9 u0 c& {+ O' G
    EVMC6747_init( );
' A4 [" q# w5 `5 @2 v        /* Call evmc6747_intr function */
/ j" e2 {+ N( p0 q    aic3106_init( );6 `8 G( T5 x) k* ~% _" g
        while(1);  ]/ }+ {; ]+ ~' X0 A
}
! I* Q# v8 ~) L: F# Q( y
" T1 ]( d5 _. k$ y- h" i5 r! L0 `$ L7 ~$ v3 G
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" ~2 }/ A$ [4 P" w8 ~
/* Initialize MCASP1 */( ?$ F: D0 v; I4 I
    mcasp = &MCASP_MODULE_1;& e6 \4 Z9 K& \3 }& c# J
    mcasp->regs->GBLCTL  = 0;       // Reset
1 G  E- R/ h! O; ^7 m    mcasp->regs->RGBLCTL = 0;       // Reset RX: \! W3 G) E* m& T! n1 }2 F8 `
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ a) n. e0 w% x( M8 t/ {+ z% ?
    mcasp->regs->PWRDEMU = 1;       // Free-running
  B7 O- y) C. v9 h3 Q2 b+ j   // configure McASP0 receive registers4 b$ q: V9 b& o$ n" A8 X5 _5 B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) L3 S; B3 {4 Q: b( _* Z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' b: \% N6 B5 L6 X5 _, w3 Z0 O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 _: m2 u: N) j9 [4 V3 ^  G; G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ c9 W- [0 \1 E: _8 \
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 F8 O+ P( S+ C, h/ f4 v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ x8 X# w* y( u: K, n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 p+ C5 \* M" T* y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 W' ?0 U$ k/ ]6 T& ?% M' N  e* V" {( a4 {0 \& X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 p0 Q) H6 n# e6 _  F4 h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" A4 @/ y1 M! k/ O( Q  ?- o: Q0 `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' t$ H# M. {/ i  O$ r5 Q, k7 ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 R, q6 S: ~$ w6 p) u# r
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# t) E5 N5 f/ d$ v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ K/ I6 u, m- \7 W8 a2 Y  |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  A$ B! U. j# m7 O$ ?# K5 F( s
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 k* ?. w( C4 ^  v+ C/ s0 R
5 G* B9 g9 z) D8 u/ S# L+ M. z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, p2 S5 o. ^! ~9 Y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& h3 f8 |/ X3 G5 x    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ q+ m) \: s0 _$ J' z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* h# _) q) G7 c4 c* Z8 i+ G8 B' c1 B* C; Q# |
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) u4 g/ W3 g: a# K2 D: Q    mcasp->regs->DLBCTL     = 0x00000000; // Not used( b) e7 R1 |# L3 y0 P) X
    mcasp->regs->AMUTE      = 0x00000000; // Not used- C: g5 Y4 }7 a+ B/ i( D
7 |1 S+ ?# y  d, n/ }
/* Starting sections of the McASP*/
& w2 y  |* A/ r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' F: a8 D- }1 @9 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) I/ a2 V2 K: d# x5 l2 H( `
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % C. j' ?. ~1 M$ Q8 G. B8 A0 W- L1 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 ]+ B  R6 U# ~1 ?( T8 y  x# f( W, {- r" q9 I% J4 G: @3 R' J; b  _) a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, O# u( G9 x( ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" _( [% P/ @) T! K9 B- [& r8 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 m# t+ V5 C" d* O+ N& @, P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 ?0 @1 P7 K$ H% b6 a
1 M6 a: ^, G+ R3 ~( i) r    mcasp->regs->XSTAT = 0x0000ffff; % A* n6 s% V" H1 p# f! D; @
    mcasp->regs->RSTAT = 0x0000ffff; 1 A5 I4 o! ]% j# V/ o  _" i! C
; D4 n. S9 }) @1 [' Z8 `/ O
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, D$ P, V- ~' e! l" H7 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 N* W! ^; T: O5 o6 d$ x% U5 ]    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : ]& A4 D/ R0 V" p5 X$ x6 B2 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! g8 m) a- T* P1 a) i+ k

! m2 e) {( _3 s5 |    /* Write a 0, so that no underrun occurs after releasing the state machine */; _/ d) H: T- M& y
    mcasp->regs->XBUF5 = 0;
9 B, K' ~( |! o- M% C& B5 _' K    mcasp->regs->RBUF0 = 0;* \7 c# u. K' Q' K  p4 z1 v
7 I: o: D; W4 g9 d9 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) G: _  K6 p6 }9 F+ z. h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( Z* s. P) D$ t, h1 w7 [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 K  i; ^4 n) i5 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 c8 X& z- k5 K6 e- n# w# r0 [; h8 K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 V) _+ C5 E* s/ M) X, ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 |' C0 }8 W' n- d8 ]    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ x! s1 `4 o  o+ J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* U# s- ^5 o5 v- b" ]! t6 a
' K7 ^- V6 {2 O+ A, \; ~, U
    CSR = 0x0000;7 s9 e6 h4 H7 n- L5 X. c
    INTC_INTMUX1 = 0x3d;
- n/ D! ?8 l( |4 I7 Z, [( T: I, Z0 e9 u    ISTP = (unsigned int)vectors;
' F2 K- Q+ Z( W    ICR = 0xFFF0;  ) ]6 N1 r3 L, E! R- h; s( q
    IER |= 0x12;  
/ L. o7 N" B1 d& {3 Z; s* X' I. T    CSR |= 0x01;  2 q. I/ s$ S8 p! v. {

7 }& `7 f0 T: W8 U9 b5 v, E* c5 N) f7 x* C& b
7 w2 Z2 m) K$ T
还有就是两个输入输出函数:
  [; ?8 e2 [0 J; f) u3 H; }void output_sample(Int32 out_data)
2 K, ]" B$ U5 R% V! f$ Y  H( J{
1 ~+ P4 n7 {$ z% D3 M  AIC31_data.uint = out_data;    E$ J" L& [9 n
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& o% F* O- d. f6 e
}
$ h% K) {' {" G1 I* G0 [
9 B  H( x$ k% t- E' ^Int32 input_sample(void)
% u) V9 p7 C! @& k; y3 w0 q. j7 n{  
/ l) [$ j& q4 f, F* ^/ T  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" |0 }, K, B& P) R  return (AIC31_data.uint);
. |/ W' U! N6 E. z8 i}1 c4 e% S+ ^. \$ c) z

+ J& o0 K0 w/ W
分享到:  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-19 20:27 , Processed in 0.040539 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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