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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! A& p8 \8 e, n) t) n
main文件:8 v. z. V4 J, k4 _9 X
interrupt void interrupt4(void)  3 V  i- n4 u$ ]. Q7 u& r; g
{
1 |8 q( I& y. C* R2 m% d3 l( W  Uint32 sample;3 _) Q/ P4 }0 s- K% K( u
5 c5 G# Q" R. g- |3 i  v
  sample = input_sample(); // read L + R samples from ADC: ?- Q' a+ r  @$ a+ c  i
  output_sample(sample);   // write L + R samples to DAC " ?! {* M) o3 V2 ]3 M
  return;
' `6 w3 I6 h1 f8 E. Q}
- @9 b* B8 Q: E( S7 I2 `, p# Z6 G0 P! B  W: P- z% z
int main( void )
' j/ T8 Y) h: q3 y" u3 Z{2 v4 v; V9 |2 ^8 {8 W" }

: C- a; [; ^. ?7 n: t1 T    /* Initialize BSL */- q' y: S0 L5 i/ p
    EVMC6747_init( );
! a5 s: ?# Q% V: h% f        /* Call evmc6747_intr function */6 l4 {# Y  z# ^3 r
    aic3106_init( );
1 S) h, }" |1 B8 u        while(1);
' b/ d' t5 K# r: ]3 W; o}  E" e# E' L# E% P$ y4 v
2 o( f% F( f8 m% s; p0 b6 k; ~% |
* l2 S* a2 P4 r4 u- A2 D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( E! _7 s7 P, }. U/* Initialize MCASP1 */, d5 M$ Q( p$ B$ X2 [' V
    mcasp = &MCASP_MODULE_1;: g) |% F, x2 H( G
    mcasp->regs->GBLCTL  = 0;       // Reset
# J! m% y, N- S& G8 d    mcasp->regs->RGBLCTL = 0;       // Reset RX
! n6 E7 i: L: d/ I$ m/ \    mcasp->regs->XGBLCTL = 0;       // Reset TX- r+ k$ r9 y: D5 v
    mcasp->regs->PWRDEMU = 1;       // Free-running
( b, t+ q; |% W9 s  y   // configure McASP0 receive registers
, R" f, G" z7 u- p3 B1 C6 N. Y( p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ {6 F# R, V, R0 [+ G9 \+ ~, W6 k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# A4 f2 ]1 y; ]1 U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! G" G4 I  c8 y8 m: p0 s: `5 R9 S' \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- G  o6 K4 C5 |9 ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# W  e! K$ s% c/ [; E% x
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ _* j+ q0 h, U6 P9 {' {    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# U- U4 \6 T. H% @' @- D6 Y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 s2 g# g, i1 B

$ K/ S5 S* g. r7 P4 u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, e( m; v! p7 W: l) k" l
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ L, A" |# w' ?! j7 }" |$ z2 q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 J7 l" Y  T: _% z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& J" U0 Q; U' d7 `" Y3 A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; [0 y' L$ c* R7 W
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* Q% \. t$ d7 Z- _" w8 c
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 M) Q# _" `5 X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* H' g2 a! V) w9 T) W- j* B$ p

4 }# c: r8 `* w8 k# s; z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 y9 l5 ]+ j' Y, b, m
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. Y" n' l  K  T  q% N    mcasp->regs->PFUNC      = 0;          // All MCASPs! Q) p" X: Z/ w$ q. s: F0 k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 }+ t: O  @! |! }
+ a3 D  A5 V8 ]# E& O    mcasp->regs->DITCTL     = 0x00000000; // Not used; |8 h5 w# n7 ]" Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: n( U/ y; ^3 a+ ~, i! \) Z    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 T" z$ a) W$ K5 N6 N8 ?3 ^! e5 q; [* W. }/ Q1 L: Z6 P  B
/* Starting sections of the McASP*/
. h/ Q# x% w* x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : G5 `# K5 N2 h9 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 f& v4 Q. H% a  Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  {0 W1 d5 f1 ]+ k( L- |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ h. C4 ~% _  R. E' q* O% ]/ e
  j  f" E  ~/ H0 v( }
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 z  Z6 X* a1 \1 r" E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 P$ N  ], R0 }  k# {% B5 C$ y" B1 H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  D  a4 {- ~; C! W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ x/ ]0 j! H' [; e8 [+ u
& G6 s0 ~( h: X8 n6 \$ h7 ]  O    mcasp->regs->XSTAT = 0x0000ffff;
7 Y7 I% \+ \* T6 L; B9 v* \3 K    mcasp->regs->RSTAT = 0x0000ffff;
" T, @' d, \0 Q* r* o0 G* z- i
1 j' K1 t& b; A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% e0 Q7 X/ ]: \2 N" m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& y- i9 v0 L5 O8 P: V
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ Q! U, x0 R3 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- _9 u) b8 ]- J" _- q, Y: `3 X# k
    /* Write a 0, so that no underrun occurs after releasing the state machine */: R7 o2 s( q% Y. ~) P) {
    mcasp->regs->XBUF5 = 0;! t% f, P" X) R* `& ^
    mcasp->regs->RBUF0 = 0;
1 [9 R7 c1 n7 ~! ~& E2 A
2 m1 v0 D# x1 u/ s0 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( }' D# V! k: \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 t5 ^: Y8 j- _4 N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   ]! h, O' C: e3 K3 ?/ `" z0 H: [% P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 n9 e0 c& t: b& k# Z* l

' O) b. Z# q) x7 g8 U6 c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 d. Q- b: |, W: Q8 H! E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 w7 @+ I6 L4 X2 X, `! k" j' d
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 f- Z  v" M8 e# b0 F  Q# E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 h) C& k5 ?0 n5 H* w. t
) o( i& ]( N+ E/ Q3 `5 [
    CSR = 0x0000;
8 O- D3 b% H" k7 d- X    INTC_INTMUX1 = 0x3d;
  O7 r3 [5 M9 y& t4 x, z, C/ W9 q0 g    ISTP = (unsigned int)vectors;' G# u( d8 |! y$ _: g: Y
    ICR = 0xFFF0;  + L/ `9 Z4 [7 s1 }; F
    IER |= 0x12;  
2 F: X5 E, Q: P2 v/ r' O    CSR |= 0x01;  
: T8 X6 C2 n, m" h# }9 a
- I3 G- T, X6 E9 Y# M
+ `; q+ O7 S  l9 c% W7 a7 X& O
) g( b1 ^- B& [! k: U+ k6 x5 L还有就是两个输入输出函数:
- {) y. g' ^3 `/ P1 M; w: tvoid output_sample(Int32 out_data)
$ K6 Y: H* @2 y{2 _5 Y! Q% D* X7 S% ]
  AIC31_data.uint = out_data;  3 e; t; E* |' X( y( X( b4 h
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. Q, l4 |: ~# p# s0 u: R9 c( ]! R
}
* k7 a- c4 p. ?4 `5 B" }% N  j5 k6 P$ v3 m' {
Int32 input_sample(void)
! o- ~* z* f, p. _9 T* B{  7 L6 p' m; @* G( h& W  R
  AIC31_data.uint = MCASP1_RBUF0_32BIT;# U! X6 ^  a# B- v+ O
  return (AIC31_data.uint);
- }9 r  y- X" t( n( X2 j0 |- a}1 [& Z4 e) O8 Q' I* J" G! y

7 _. g* J/ {% U" I: \4 b# ~
分享到:  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-14 04:44 , Processed in 0.040730 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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