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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 {! C* `( y; S! M1 t0 k
main文件:# z+ E- s) \, B& m: ^
interrupt void interrupt4(void)  $ a1 L; a' r" g0 H4 Q+ a
{' b6 l: I" D# M& [9 y: b) |
  Uint32 sample;
5 I) W! y$ a: m2 s. I- c2 u
( y- w- {, H. _; f' x  sample = input_sample(); // read L + R samples from ADC. w" F0 U/ _* m& I
  output_sample(sample);   // write L + R samples to DAC 8 {7 l- @  F1 }, s
  return;
- c' L. X2 z4 J}
( q) _; q- x, y$ Y+ t/ a4 A
2 `! C  ]) V8 Aint main( void )
# g, Y. n4 [. e1 G7 ?{+ T; ^5 N% _, {) p% r

1 D" [7 v) Q$ L% k3 m. a: x    /* Initialize BSL */4 k$ P' @$ ~2 [" k& p4 x3 z
    EVMC6747_init( );
' x/ n! |* W& h. b# h! d        /* Call evmc6747_intr function */
9 B* t/ g: `( W    aic3106_init( );
* l* f, w$ y6 d& q0 S7 v        while(1);
4 A! M, k% ~# G- u# c$ @}$ {8 R7 \5 G3 [8 A( d. G
9 r. x0 D! _) U7 C( [3 V
2 b5 n6 N0 d( E; M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. e- B6 P8 @. M7 [3 X: k# j: L1 d/* Initialize MCASP1 *// |/ y% @0 I5 @. F" O% B
    mcasp = &MCASP_MODULE_1;
. C1 e8 [; B# T$ B$ ?9 B# {    mcasp->regs->GBLCTL  = 0;       // Reset
9 ^  e6 @! z; I9 Q' E+ h% p. l    mcasp->regs->RGBLCTL = 0;       // Reset RX$ p% M5 O( e# ], }
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  S. W' b8 X) ?% t. C    mcasp->regs->PWRDEMU = 1;       // Free-running
8 k. H  f1 q5 c9 v4 ^   // configure McASP0 receive registers- N5 q% v2 [7 v
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* q! O7 u. M  K% G& H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  M8 @2 v0 W. X# `( {3 F/ v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& P5 Y  H+ m* X" v' L8 l0 a- T% V2 p    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 ]( w# x7 L( n$ Z/ s" F" I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# G" |1 Z. L' Z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,19 i; J3 b# b6 K) R# T. t6 N6 W
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* j/ d" b  V: `, e; W  T( P
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: |& h, L" x/ s& A0 _0 I# f# N$ [% b1 i; e0 u* `& r% q, I4 }
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 b: t5 M9 M: P8 U! C% T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 H% {: a4 v$ H$ d    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 H! O; s9 m* s4 z, _) B    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. R: U7 w0 Z5 o& C3 g4 i& i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" c( A9 B, W7 g. ^. q" ]
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* ?) e" N! B* q/ [& _" v/ `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* E: X8 h* f! t/ {! O: K6 k& T, V    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. y8 P. Y, |( l% W; K1 t) W+ {8 ], u# k7 [5 W% X  j
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& q* [6 F$ R) p! ~# [    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 Y  z8 Y. g: o- g3 G# ^, {
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- p$ z* q# f2 R2 z7 ?1 \/ j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, y) R+ l2 M8 ]( H; W, z7 B: z$ \+ S7 q( X% {) x
    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 C1 Y) R4 s* g* [1 b    mcasp->regs->DLBCTL     = 0x00000000; // Not used& ^; C0 k( u% ~0 l4 k- g, x
    mcasp->regs->AMUTE      = 0x00000000; // Not used3 w8 S' S! C1 |9 D7 k0 c( n
5 `/ }6 l/ Z, ?9 W  m3 A9 u
/* Starting sections of the McASP*/
9 e7 X- m9 ?2 v/ o7 d    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; l; u) `( M0 o9 w4 B& U( Z* F) m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . V3 O4 Z. x, K
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  ?& Y' k/ E4 d. v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 F* Q, M4 P& G# H; f" U0 N
( U* ?! k: q6 _2 J9 A- x# H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % s6 a& W  X5 s1 B6 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 z! q. s( j+ U* x6 m* j    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   F( u* w0 A# H4 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. {9 a4 I8 S1 G1 N" K! R
, Z3 j' v+ C3 B+ F$ B$ `    mcasp->regs->XSTAT = 0x0000ffff;
0 M' F/ k1 }+ E* d7 k    mcasp->regs->RSTAT = 0x0000ffff;
4 _) E, v* A: ?5 O) `6 i; K1 Y; K4 T2 B" G& E; P' N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" C! Y& d: w  I7 K3 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' o0 v/ e! `4 v" X) o; f4 e
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 V- m% {2 U" w- T+ |1 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 I- n3 @5 U/ S) l( e' s( O4 B. q# }. ]  ^3 Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  ^+ M9 K8 ~  D! \! ~" M" p  z- A    mcasp->regs->XBUF5 = 0;
" q+ A% k) V5 X& a% i! \" F- a    mcasp->regs->RBUF0 = 0;
$ _! F5 G" N1 A/ ]
$ C( v1 @& k# x  z0 [" B    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ k0 }% s# K) X6 D! k3 S; m. U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ x1 N) i. ~0 g/ u+ X2 ^( R; e9 T1 k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 D  W8 l: N3 r2 d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. B6 ~$ M: b8 W' p1 X; e1 |# ~" K; P& _9 X; G( \5 Z/ k0 s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, A5 o8 G  m- r' k7 {, n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 i$ A/ [+ v/ ~$ ~& X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 {& M7 S9 p; k# U3 y* L3 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. ]% T* l. y, H' _
8 r5 J/ R6 \/ r# L+ A
    CSR = 0x0000;
0 D" z, b5 X8 n( n+ Q    INTC_INTMUX1 = 0x3d;( D" E3 q" O5 @* b. z$ v5 s  x; S
    ISTP = (unsigned int)vectors;
  i1 }6 m' m* R    ICR = 0xFFF0;  4 {1 M0 |6 }6 n0 n$ q4 p  G$ U$ N" R8 R; E
    IER |= 0x12;  0 U* S! m, M: T; A5 m: \
    CSR |= 0x01;  
  J3 S% D1 ?  ]: }5 b4 G- G/ H8 S( M+ x  X- z

* r/ b6 U, V/ i8 f
+ r8 [) D$ P  C  c* \还有就是两个输入输出函数:: E5 o: i1 t" C. M$ F
void output_sample(Int32 out_data)
8 b$ K% F1 S' }4 Q- B3 a$ k{- {4 k: I& t& j* y. q, k
  AIC31_data.uint = out_data;  
/ C6 _/ b9 P6 ~. N  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ {8 t- [% g, {! Q+ {& Z
}
8 R$ E- N$ Y1 C! a' k' e; ?$ I' k0 t
Int32 input_sample(void)
) _$ ]! u5 k9 j; c5 n{  
" ^" e$ Y6 k2 W$ V  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 n. ~: t3 y$ g; X* F2 ^2 D  return (AIC31_data.uint);. {6 c6 x9 h( `2 m0 S! k
}
! Y6 ?7 V- b9 Y& O
# a& `) ]  ?" s8 P! G- F
分享到:  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-3-16 10:01 , Processed in 0.041482 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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