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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ a- e! k0 p) H& p1 d6 D0 v
main文件:
3 s2 t& I! A6 n- B1 S6 \interrupt void interrupt4(void)  
3 o! k. K& \/ C: X& A7 o; [{8 W: H, K8 T, k% F* ?" {
  Uint32 sample;
  H% W* L) t, @7 s$ d5 o* C6 [+ N4 @, Z% ~* W* p+ B
  sample = input_sample(); // read L + R samples from ADC
5 b' T4 S; Y! z% ?- r& D8 r9 n  output_sample(sample);   // write L + R samples to DAC ! H5 G$ w# f1 S
  return;
1 m) Q* q% X3 e$ u+ Y}  z# I* n4 Z- u

. F+ B4 ^* Z& Z4 Wint main( void ). ^* G9 t+ f- S" c) z. U
{
4 c8 O3 }5 W- p" {  }6 f4 [9 k: m# Z5 f7 s5 }6 s8 {3 |9 v8 F  h9 A
    /* Initialize BSL */& p6 |2 ?8 O( `: y  ^* i4 a
    EVMC6747_init( );
: y: `! a% u4 ~, J        /* Call evmc6747_intr function */
6 t4 t8 o$ E$ m    aic3106_init( );$ P4 E& ?! ?6 L; F0 i
        while(1);5 c: K5 v# F% W
}
+ g& o6 J  @7 _& I0 G+ [: k+ h4 @) U5 w4 E0 S: ]8 ]- `1 L* q
( j0 @' W( s( j1 o& ^- J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 k9 s, R/ o- r; u! y6 Y: b. l/* Initialize MCASP1 */
3 h4 T: L2 n' c; G    mcasp = &MCASP_MODULE_1;
; o- L& l+ r) l4 U5 t* Q" J    mcasp->regs->GBLCTL  = 0;       // Reset: |1 V8 y3 W$ R) F
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! t) G2 h& x7 v4 k" B! n% `    mcasp->regs->XGBLCTL = 0;       // Reset TX
4 @# U2 f; K3 V# C; ]8 @    mcasp->regs->PWRDEMU = 1;       // Free-running/ U& e& N( J* ]1 z. M& z4 W% c
   // configure McASP0 receive registers/ E; t6 x2 [: X6 N7 W* w% `# N7 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: s5 N; H6 i: C! y( V9 `3 Z5 z; k- \, E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  @7 @9 q8 p4 C# E
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 C9 U& \# b* o* E
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# }% i7 W- @) P9 H. I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- E' M3 S8 J% b7 d! i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  M' m3 O9 l. Q( l  T, l    mcasp->regs->RINTCTL    = 0x00000000; // Not used, x) \+ e1 n. K/ o8 Q4 k8 e4 P: y% C
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' C( Q6 E8 h% l
# S9 T. A5 v' Y  @    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 B8 |3 X/ g) @; Y! e
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ?1 p0 |8 ~6 C6 x9 O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 Y, S& f# |3 M4 l+ s0 v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 _& z2 P2 d  R# t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) O# }9 _0 ^! B0 i: b
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" k$ O7 R) Y' n" B, f; ^    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 Q: b9 b& D0 X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 m% F9 c( A7 N% Q! L, _  j! B* s8 E1 m; C& ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 S3 h! W2 G1 L* A: K    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# p! {$ q" U% X6 R    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ M4 c8 {9 ~% F6 C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( s9 V6 s. E% W- j& T; M* B6 t$ D0 ^2 V
    mcasp->regs->DITCTL     = 0x00000000; // Not used
- m$ E8 X1 B9 Z% I$ F9 Y. O5 k' J# a    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, D! [' Q+ @- I5 h+ V# K    mcasp->regs->AMUTE      = 0x00000000; // Not used9 u9 ~" x# p3 I* q! k% ?2 }0 s
" f3 g% j# C7 M1 {
/* Starting sections of the McASP*/
$ [. X. p% U2 A* A; E5 }4 B, n    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" B5 X: y* _; {1 T. G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 `$ B9 k5 `9 w7 T6 C    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& R8 s" N4 U  [( b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ W# h5 v, \3 M$ U3 [; `

& U% H( q' U& b0 K! u' m    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 ]  B$ q/ e- z- L7 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% {  I+ _  M- Y0 A7 a4 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 ?# [9 z& `+ @& ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: c. T+ H) V2 ]: ?/ `# {' }# V# I6 h

0 u/ E# m/ q" d2 E    mcasp->regs->XSTAT = 0x0000ffff; " X/ Q! U4 m( B9 |( v+ s7 n
    mcasp->regs->RSTAT = 0x0000ffff; & T% h% ~+ Z) s* ^0 u5 ?. J- ^
# [$ ?: c# n: i* ~7 P9 i
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- w, {+ t" G. D/ H' c- ?, }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 L( q) p3 \$ m) e0 J8 \  ]% L0 J% S6 T    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' l0 J9 D0 D  [# Z' d2 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 A2 z2 G* J* W1 m" T8 P) U2 a  e/ f2 M* T9 a  \. }$ T# K
    /* Write a 0, so that no underrun occurs after releasing the state machine */. p( f% Z  }2 B3 l
    mcasp->regs->XBUF5 = 0;6 H# Z. ?- M( {# s7 J: c9 W
    mcasp->regs->RBUF0 = 0;
8 q$ h1 f! [& n# V) k( ?! t7 v) _7 C" p/ O/ e) C+ ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* _) ~: |# d. l+ q2 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 ]8 D+ t1 \+ n: Q- \' }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- R/ s8 R, I% ?. P" {$ g6 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. ^: I0 [. G2 y/ b# v. Z9 h# P2 C+ F$ z
. X/ Y9 E# U) G: d, l2 X) w
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; `/ d' Q' B0 D- w, w( f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. y& b, f1 m5 ?* f% Y  V' z8 S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( j2 o  K' u, X4 V( u- k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! D' S# F1 l1 b; J! B4 `
) E: e- y! b" ?0 I    CSR = 0x0000;
5 A3 T  S  W5 r! t' J1 O+ P    INTC_INTMUX1 = 0x3d;
; _5 B" n. r" L0 ]. r: v2 W  i) F    ISTP = (unsigned int)vectors;
6 S; ]1 U- I# n1 v8 k6 a/ }    ICR = 0xFFF0;  + e5 [( V, C5 y+ x' C
    IER |= 0x12;  " L! h0 [$ A# v! F
    CSR |= 0x01;  5 l& k  p- d* H3 q! n, p: `5 W9 H

+ C7 i  J6 q6 e9 a% p& o
8 o4 J1 k9 }* b( G4 ?
: k3 {/ }1 z8 M/ _0 y$ ^还有就是两个输入输出函数:
% Z2 I, Y$ N3 ?- O* U/ dvoid output_sample(Int32 out_data)* z4 T% `" F- u1 m1 w% q$ m, `
{9 f$ C, V3 I+ V% z$ Z1 H: k$ w1 W
  AIC31_data.uint = out_data;  0 R6 Z' t! ^) c4 p; A  {: V
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( \% o$ i- e- q. ~}) @7 D4 o( p; n+ R/ h
2 E" H5 S2 K* U: m; L
Int32 input_sample(void)
( n" h  l4 K# K{    T  X! j. u; Q4 q) X9 J* n/ l5 E
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 Q+ v8 D. {6 n+ D# C  return (AIC31_data.uint);
) G8 R5 N$ A8 G}3 ~* n# g1 E! a6 c# j

* t( Z; s& q9 \! c
分享到:  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-27 11:17 , Processed in 0.072885 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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