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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" B, |# s3 X( w* }, p0 u8 H+ R9 d
main文件:
+ j# S5 W. k' Winterrupt void interrupt4(void)  : W( @1 h' m3 }& j7 a/ }
{
* x- B6 W/ ]  S  Uint32 sample;6 D$ H9 X# V& y; @6 ]

: X1 m6 r5 F4 @  sample = input_sample(); // read L + R samples from ADC
3 v1 I4 e+ Y" D  output_sample(sample);   // write L + R samples to DAC
( C" o3 w2 s9 r* p  return;
% d& o' l7 c( i  W5 ~: v3 p; e}
8 ]/ w) ]8 g; w& w3 k. Z8 g% I& @6 F6 h/ O8 c& \
int main( void )
& G% ^9 r4 g9 [, ?& t{
9 ~3 f" {9 M# Y$ a# ]
4 ^# `& n: u, ^& D6 M0 K% j    /* Initialize BSL */! c1 L# w$ [+ f7 n/ [" D
    EVMC6747_init( );
$ R8 `- y3 o- r7 W1 l$ k/ u        /* Call evmc6747_intr function */
+ W: ^: W2 C% G: \0 ?. |5 `0 U    aic3106_init( );
: A6 H8 t# O7 N2 d5 b1 I; w        while(1);
, f* x1 v, n: N) m2 s7 ]}0 J9 U0 H: U) G: ~
3 ?2 b) J+ @/ l1 \1 M- c# T- u) W+ }
! z, ?$ Z% W1 Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" N# D" c. q# d& o& `/* Initialize MCASP1 */: m& t6 l% p0 s: L" h
    mcasp = &MCASP_MODULE_1;  i* J) W' D2 ~' i. U/ k
    mcasp->regs->GBLCTL  = 0;       // Reset
4 u) u2 }; }+ [    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 Z- B/ B0 K. v    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 [$ n- W  \' M, F6 h    mcasp->regs->PWRDEMU = 1;       // Free-running
+ c) K7 @# I1 ^/ h   // configure McASP0 receive registers
5 E- u! b9 v3 F* d/ v3 o    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 m$ o) T9 p" y  t7 y7 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 I& b6 S- F2 ~& I5 H    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 S# N$ `/ z5 l% Q# g
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 N  C# x1 |" _( P- O    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 ?6 S* l5 |& |0 @* ~, \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' R; N: I0 ]) E, |0 Z    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: l3 @( z: z4 x* f* O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- q' U, [! [4 P! r8 q& o( o  C6 l8 c! y! G! K" n* z$ g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 U; u' L* t/ N0 F, Z# }2 T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% ?+ T3 ~3 z8 ]; p7 {
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* ^1 X# R. ?% E
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: A. c5 _0 L, c3 y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* }1 K& K3 h3 b& k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! H; j1 Q  o8 _$ M; a$ n& h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; w# H+ ]6 G; E' y. e% t4 t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; ]( p5 N( k2 Q3 r- S/ c3 o4 l% q) O  i7 z: D0 s& }
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 R! J0 z; q; {$ @7 G2 s: H2 R: y# W
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 z0 |0 b" j" O3 f5 l  o4 j. e1 O
    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 B) h2 O2 D8 O6 _: v  _" y    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 z8 M3 u# X5 t, Q* [! J. Y) R) E! ~' k
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 l* w2 O+ A$ |    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 m4 o- w0 C* j3 v6 ]! R
    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 N$ {9 s6 W; {# @, E8 {7 d# J, B+ w
/* Starting sections of the McASP*/
6 f1 \/ m! M; }& j" I8 h1 Z* s    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ W+ J: S2 t$ _( t+ C  k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 V- u  N, g. ^- l& t! Y" J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 x6 A3 d# O. r! J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 ]+ x  f/ Z: q; }
. N- A' ~) s$ ?& ~- }( w& P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , p8 X5 G7 e5 |6 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) _& ^5 u1 e5 i" p, n! D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * S+ V  B1 E3 Y: K6 m/ i! m2 X' c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 K5 s2 ?) v. F/ D4 O

  }: Z* Q" `2 K    mcasp->regs->XSTAT = 0x0000ffff;
% c& n' e$ G5 n5 h# P    mcasp->regs->RSTAT = 0x0000ffff; ( e0 J9 b. E# Y9 j% B5 E- M
6 W, E8 `& P1 f" Y2 l! e6 \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ |9 Q; j, X4 y+ F; D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 F" I2 U9 r" s    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ P+ q0 Z8 w2 }5 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 x: y* ]; o  x5 [. u: W. ?# y; Y. ?5 |
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* c. X$ [! F6 f1 J; v    mcasp->regs->XBUF5 = 0;) n! X; R0 z1 k9 J* j) `
    mcasp->regs->RBUF0 = 0;
4 Q$ R7 j. {* ]" ~: F
( X/ |% Z& H7 U. I0 F! B; s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , K7 h3 C+ O' k; g2 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 m8 r: ]8 y) J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 A# _7 k" ]2 L* P4 f# O7 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, ^" e& H; O$ T' n  Q  M1 t! O" w
* O( f! J9 u* A2 _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( P; o2 g6 z( z4 ]1 G3 R2 C$ Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% I( ?+ C6 C3 z' Q0 a: h) v; |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- p  v( }6 a1 Y0 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! ^% f8 b. i: A1 v8 c6 V; m1 M8 G. i& r+ e* t9 u
    CSR = 0x0000;, {2 Q. q) a) K3 I$ g- k
    INTC_INTMUX1 = 0x3d;& P( V3 a( }3 }! \8 y
    ISTP = (unsigned int)vectors;7 {1 k' k+ u$ \3 o1 ^# D& A, c4 h9 i# [
    ICR = 0xFFF0;  
7 ?8 q5 q8 p; ~/ C5 a2 \) _# d. {. f    IER |= 0x12;  / g1 b* m% }% f: B$ p8 m* Q5 Z- Q
    CSR |= 0x01;  9 x$ p# Z  G5 {+ I$ m

) @  ~+ A& a/ {! \8 G/ P! P! j) p
) P" L* w  U% A9 {+ m( J/ Z
还有就是两个输入输出函数:: k6 O( K0 ?4 m0 p9 w( D8 D- f, q5 D
void output_sample(Int32 out_data)
$ S2 g& P8 r$ @{
4 o  B3 j2 M) |7 {) C) O" [  AIC31_data.uint = out_data;  8 a0 y! h3 N6 L4 I
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. Y) `. `# G6 A5 C) |3 Z- B
}, Z# W5 y/ o+ _- _
; f& ~8 Y  e* e
Int32 input_sample(void)& |4 S" J7 x# l: o
{  
5 X) T! B+ k; z& |- l  AIC31_data.uint = MCASP1_RBUF0_32BIT;# P& \' R( X" h% S: Q% h! y  r
  return (AIC31_data.uint);9 L+ {! T8 s% V* b% \2 U
}( `* J" x: E3 ~# G
# M& n" f( w- Y
分享到:  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-17 15:52 , Processed in 0.039906 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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