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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! O8 l9 T3 B0 I' O% o; j9 p
main文件:
  @  z4 n! f( f( w: T2 Uinterrupt void interrupt4(void)  . ]  k1 n9 O* S" ]# y' f" X
{
- C3 A5 L/ B! B# T+ @$ h  Uint32 sample;
9 r! S% I% F; B2 r  Q" J: s* _3 Y( a, T/ x
  sample = input_sample(); // read L + R samples from ADC
, J. n) T+ r* T6 Y) p' `  output_sample(sample);   // write L + R samples to DAC % J; G( I" W( B4 |
  return;9 F3 S# S! c* [0 i0 R
}* o, ~, \& m% a5 z
9 ?# J' Z0 G) ~
int main( void )( B& G+ `7 X2 }5 g1 o
{
6 ?3 h4 f1 N6 A- j7 h( @: s$ H  Z. {/ d
    /* Initialize BSL */! s& F3 A; V# m9 @
    EVMC6747_init( );
* I! W' W7 N/ l5 Z        /* Call evmc6747_intr function */0 p: T- ?, V8 s/ Q1 ?3 M2 e
    aic3106_init( );
3 L% J. j( O7 y, P4 Y' K* B+ Z        while(1);
( _% Q/ x. ?4 K5 H6 i( U& g}
. n, f) [' Y% J' g% x7 c5 a5 ^6 t. Z* s$ K" o- d; g2 y

. N' H% Y  |, M) u% c6 Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" `4 r+ U. E# c  Q$ q# J8 C/* Initialize MCASP1 */9 |% p( w" H' R, v" g6 R
    mcasp = &MCASP_MODULE_1;
$ O8 ~/ b7 s# i    mcasp->regs->GBLCTL  = 0;       // Reset$ |8 T* }0 }. Y6 a5 |5 W
    mcasp->regs->RGBLCTL = 0;       // Reset RX4 j" z( i7 e# X( R/ Z  f/ D
    mcasp->regs->XGBLCTL = 0;       // Reset TX1 c8 I8 P6 U- t( }1 Y
    mcasp->regs->PWRDEMU = 1;       // Free-running* B5 H1 y- B2 k8 q1 Y, g
   // configure McASP0 receive registers3 S$ a# w. Y3 r5 `! |6 i
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 ~; B* c$ ]/ J9 o9 V9 d4 ~6 H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( c; n8 e+ T! |' i: l& p1 P3 h: Z
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 [% F3 [* f( m! C% `: R
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 o$ T( F  h8 F/ i  A8 E
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ w. e% {0 U9 `- V3 G8 a
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( t- k5 U0 y6 s4 k. |9 P  y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* F0 k8 [5 r! y4 K    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 |; n) F9 e7 e9 j; e' w
9 V5 z' C/ k  L: o; p$ r
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
2 U7 p1 N5 a$ E# W7 w; c5 J    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ M) q9 O% i" `& q+ R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 |& U- ?: V/ b+ B2 e. x; b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 D1 Z' z. x* K1 ~0 w    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- l  {/ P2 D: d3 `; K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' P# N+ f9 I6 z7 a$ @3 q, e5 p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# F$ K$ m6 Z8 m7 m+ [* W5 k    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  J& k3 c( Y* ?# @% E5 q/ [9 y2 C. ^  p( D0 M& J. `$ E( T
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 K+ \( P3 _" ]1 x2 |. r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 a1 K& Q; M' I+ M
    mcasp->regs->PFUNC      = 0;          // All MCASPs
! R) s* X- S1 p6 N* A: K+ V    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& }. E( L* C9 M. C% j9 u0 E
) K! }9 H4 J0 k+ M5 N  D
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 N) [# q5 R. D  H
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 l. h" K- u! @/ D6 B8 {4 e    mcasp->regs->AMUTE      = 0x00000000; // Not used
! L7 j+ D2 J, @. K2 R$ O7 i+ n* t; V! G: l/ l
/* Starting sections of the McASP*/7 y( T1 P; ]+ M6 Z& H- b2 N
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) x; F- T1 i7 s! R) `0 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % x. g7 o1 U8 ?1 U" ~9 ^0 a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   x. |2 d" O3 U: n4 }! ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 T" V# }; @- f- H* O8 D1 O1 J
# T2 E& c5 ~/ e" ^. F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 f" r5 n  z7 _* r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! e! [: x% h, a! l2 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 D* n# c; |% Y6 Q3 S" b1 k2 Q6 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# |+ i. M' Y$ n0 I4 y# w
: o# p1 @0 a7 d2 S5 ?8 `- A+ ]
    mcasp->regs->XSTAT = 0x0000ffff;
* q) I: Z2 ~- }/ j& t! t. V    mcasp->regs->RSTAT = 0x0000ffff; 9 s! S7 F+ H6 C1 q( X2 V4 B
5 J, _. w1 k1 n# J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 s4 D" z9 q1 k) k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! `  D* z' {8 r% s, ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" |$ Q" ~$ _& n  Q( R' W/ ?$ M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& L2 _5 `7 d9 @, D, u1 X
4 ~* b. M) e  [* W
    /* Write a 0, so that no underrun occurs after releasing the state machine */, y# S  Z6 Y7 z6 T
    mcasp->regs->XBUF5 = 0;
4 a. a) m% ~, M+ A    mcasp->regs->RBUF0 = 0;& E( b% f* W. G6 P

! {  C) P7 T( n  u& y8 V8 q# k    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 A3 S4 t) w  e9 ~9 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 {! W+ |( g9 b6 K# e) S3 ^: B' Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) S  P. ^, T  b0 N1 G# D5 ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ {* u  Q! o7 T/ U

) h) y' H0 I7 J( L9 F    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 [" \' z9 ]3 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ u" A  I; _4 K/ U. R: k
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" `' t: o! U( d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 x2 G8 w& S$ T
/ G; O3 N( _2 v5 _3 N6 e5 b
    CSR = 0x0000;- Y2 d- C3 @1 G) G
    INTC_INTMUX1 = 0x3d;
: v. |' m% ?# P+ G# ?) I% E    ISTP = (unsigned int)vectors;) J1 b$ U& j, {7 r8 Z6 }: \7 p
    ICR = 0xFFF0;  1 L: D9 g8 e4 X  T! `% V* _9 Y
    IER |= 0x12;  
' T* Z2 n. D" T3 R9 [# E) R& H8 F    CSR |= 0x01;  
0 Q7 k+ I( H$ G: t! f
% F! M4 X2 M) D$ ]8 ^
( ~+ ]( E3 H8 Y5 H; Z* ?, i" G* i5 p( v+ \/ G# e0 G1 M9 ?; j. n
还有就是两个输入输出函数:
& h. l+ M. f8 F" c: evoid output_sample(Int32 out_data)
! _/ {5 j2 m; _4 }! L4 {/ e{
" F9 Y9 F0 I# d) p! P; t  AIC31_data.uint = out_data;  * c% s9 g+ N+ }- j2 b( t8 Q
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ Y# M) W5 p  V$ {) Q7 N2 x}, k& }# j" I3 j  m
3 h$ i3 q' t* R* _
Int32 input_sample(void)
0 `( q9 W* K% w5 }+ o( ^9 {/ @' \{  ; X% ^& z& U' D! j/ N+ }
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 N3 ^( e; U7 D% W& e' m( C  return (AIC31_data.uint);/ j8 b3 b0 k' U/ }6 ?: \
}
. [0 `7 N" y6 ]9 R' A% U
0 v- @2 N7 |. U# a
分享到:  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-4-8 06:51 , Processed in 0.039806 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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