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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% ]" R, I; z8 ]
main文件:0 f% P2 A5 H4 G/ Q2 q: b% V: l6 p
interrupt void interrupt4(void)  
8 u5 H, ]! G# g2 J! _{, Z! q( X; A8 _
  Uint32 sample;
: l5 z% a  \/ k, I; V7 w. F0 Q
9 l# s  _5 V1 ~0 ?% e3 z  sample = input_sample(); // read L + R samples from ADC/ \9 C' N2 ]* X. e/ m) ^: T
  output_sample(sample);   // write L + R samples to DAC
+ Y) N" U  W9 \9 {  return;. p* v9 T6 W* M. E4 b
}
; `* ]! [7 T; C9 m* ^9 c
, M4 V* n8 T- J( @! Zint main( void )
& l- ?+ I2 X* N: g8 |{5 a, }. b1 x" R" A" l3 ?
+ w- V) ]4 q; O/ r5 O
    /* Initialize BSL */4 a" i3 c5 }" [- P- r  ]
    EVMC6747_init( );
# ^6 u# K2 T/ r- v        /* Call evmc6747_intr function */- L& E* t2 C4 s% |
    aic3106_init( );- E; h) E" X$ _& Z& ^1 \5 I
        while(1);) O& Y7 a% e9 D* [  S
}
% A% o; r0 d& `0 U0 f
- q/ l( Q' g, B' O9 ^# O
( o$ |; ]" G& m9 q& eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# R5 m; z) ]3 z( T/ F9 w" i; R/* Initialize MCASP1 */6 U! `( C( q( E8 }9 {  w
    mcasp = &MCASP_MODULE_1;
, Q+ t) J6 w. W    mcasp->regs->GBLCTL  = 0;       // Reset
8 \% V  @9 [* |* f8 u, P5 ]+ {    mcasp->regs->RGBLCTL = 0;       // Reset RX2 y5 e& U& W9 x
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ |  V; N! i/ P! D% G    mcasp->regs->PWRDEMU = 1;       // Free-running
! [! I, ]4 W6 r, X   // configure McASP0 receive registers( @3 t; K7 B8 O& `2 D% |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 {' e5 c8 f# b* A1 h/ K7 o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 _! j2 f7 i' F1 I+ F- q: g    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. W: t3 @1 {) K3 a( x5 ~
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# Q4 r) }9 G* K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 X7 O: P1 V9 R1 H
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# m" @$ Y6 z5 k1 G6 ~% \/ F' O4 t    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- o( \6 n2 p+ t7 p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 L9 U6 x/ z2 ^% K

$ N2 w6 @( p" @0 I8 t; i    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
% H- ?# k& C/ [; G9 E) @. w    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ p4 k! M# @4 i8 P; A' D
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* n5 P( _* ?" {$ J/ j
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ u, I8 @; q' X9 z  y% y9 T7 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: V& x, ^: B0 D( l" ]; l
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: }. p" g3 ]& ]$ v, b; g' [    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" i$ U8 s+ Q2 m    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" @+ X: m3 q" A4 J0 N

7 o+ Z0 N- z7 s/ m2 @    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) [: C& t& j* i' Y) }    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" N" X4 |: f8 e1 U
    mcasp->regs->PFUNC      = 0;          // All MCASPs
* Y4 N  p$ {  s; n7 E- q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- f$ }! _! R/ B1 @" @, ?2 ?3 _9 o& `& n9 O( i
    mcasp->regs->DITCTL     = 0x00000000; // Not used
! O3 _, x# H: c    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 o6 m( D* ~1 t" l1 K- E( z    mcasp->regs->AMUTE      = 0x00000000; // Not used1 p8 |; x0 f* _+ n$ F: Z# T

6 V9 o1 g1 ^4 |" p0 }/* Starting sections of the McASP*/
% n1 |# L9 _/ E    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" b* O" P4 ?& I2 [3 w% S2 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) G7 R8 ?7 ]3 s3 |2 X
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & {3 h: o1 Q  _& }  k  K, V7 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* Z. {& p; M; O" ^/ M* h' s5 ^6 L! ~& ]$ G6 R4 L( r7 U
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' G/ h" G' k& {) N  f" z) H$ {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ K& x* k$ g6 \* S7 C4 Q, `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # \; G7 I6 k( `" a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 C# n' d- M* Y! C

5 G8 E5 Z% E& W, k8 Z    mcasp->regs->XSTAT = 0x0000ffff; ( j& k  T$ s! A1 `/ m+ p7 o0 o9 r8 W- ~
    mcasp->regs->RSTAT = 0x0000ffff;
# v; F* P8 p9 S: n3 Z& a4 ?& c( V6 D/ E; r; E% X- ]1 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' N  [  q2 h1 g* |/ d( J9 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ j; h4 b; m) o8 ~, Z6 k" t& m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* O4 m: ~# X, M2 ]6 ^8 K0 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- y' w; g1 m1 J: c& x

& S& ]3 D7 S, M4 g, Y    /* Write a 0, so that no underrun occurs after releasing the state machine */' M" f0 N/ l0 X: L- M4 @
    mcasp->regs->XBUF5 = 0;4 H% B8 U9 E  B' @% t) A  ~! S
    mcasp->regs->RBUF0 = 0;
- Z8 B; D* U" X+ \& X4 z7 A. t8 {/ L4 w: L
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & g6 |$ D( N3 A, N7 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 |2 B% X5 L9 H2 N; U0 T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; B, q: f5 i* Q& b% h2 W0 ~* h2 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# U& W1 K0 P- b6 i' v# \+ J* r  e
' V. k2 E8 ~/ X/ S/ x6 R
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ r) F9 G8 r2 ?( ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# E6 M/ `* [/ e2 Q- p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 W* U5 }* K& _/ {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 s6 z5 t. R; _9 `. F) Q/ t
" k2 i1 R1 {- L9 x; g: }    CSR = 0x0000;5 ~0 a& A% R* m/ g: l! B; m/ y
    INTC_INTMUX1 = 0x3d;
/ H! N, v. a. H3 e+ w" x) k2 M    ISTP = (unsigned int)vectors;6 O% K) W# d3 V6 X% g1 A
    ICR = 0xFFF0;  7 O2 v3 b. t  L& S
    IER |= 0x12;  , \& U- P. [4 ~2 e9 Z$ G' L$ B# ~
    CSR |= 0x01;  
( f, V/ M$ [5 h1 B, Z
9 v+ }  G, G1 m3 {: D; g2 @) [5 R) m  C- B( u- Q$ i1 H  T

0 q" z2 Y$ t9 w- K还有就是两个输入输出函数:; l, p. l9 ^( m: }$ D" s
void output_sample(Int32 out_data)! H$ T7 R0 E" Q, v+ V
{
! Y# k0 Z4 r  e9 F  f# ]  AIC31_data.uint = out_data;  
3 n. Z! I% T; u5 H0 J  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ ?1 `. ~* ?: b& S}
6 k! z4 k# q  M9 s/ q7 c0 Q* Z# t( d! }3 {% S* t
Int32 input_sample(void)+ {! P9 A5 ?% E- I
{  
3 O. f: }0 K9 L% b- K$ D  AIC31_data.uint = MCASP1_RBUF0_32BIT;
  C7 T0 c: ^% l& j  return (AIC31_data.uint);
  W. k+ y) Q, s; E2 x, I1 e}8 ^4 a( w6 [3 L6 y7 [) }1 ^9 ~2 @

0 E9 O# K9 |! R; R' ^+ |; J
分享到:  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-2-18 16:26 , Processed in 0.039621 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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