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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& q4 Z& e/ G7 m" Q& [
main文件:
  q0 i" n5 \1 e% Finterrupt void interrupt4(void)  
2 f+ h3 u" H8 [9 {, X) i/ y7 ~{
' X) o6 @, n7 Z  S" j' n  Uint32 sample;; ^3 x8 T! Y. b6 ], |
7 C( V+ z2 e: d2 G5 T
  sample = input_sample(); // read L + R samples from ADC
! a# z% [! E' j% @+ o; K  output_sample(sample);   // write L + R samples to DAC
: ^! G+ t  p( ]0 X  return;- _. B/ {) N' ^/ G, x' V0 A9 `2 c1 \
}
0 t! W. E: k, X/ g7 j* B1 s$ l4 [( x+ ]  K& D7 T
int main( void )
! C9 b+ T! r) [{
* i1 ~0 Z0 O- B2 n/ E& p$ Y" N% P- w9 k
    /* Initialize BSL */
- v, Z0 [( p, M5 l. m    EVMC6747_init( );
4 K8 P- f  F' T% R5 f0 l* }- B        /* Call evmc6747_intr function */" m5 p' B/ n3 W% \8 d" X" R
    aic3106_init( );0 ?% j+ z4 A; F  y& F& ~
        while(1);5 ]' _* v( \+ a
}
% W- m2 n; k) r$ v8 r6 j' s' J
* Y% p% Q, m3 E/ `$ g9 s- L) |; U) ^+ }2 b/ K3 M- e" z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* l# ~3 E+ e" }3 @9 D/* Initialize MCASP1 */( j- {% s4 Z( b: B; b/ a5 T8 F
    mcasp = &MCASP_MODULE_1;
7 W/ E% n; H- L) x1 I- L1 w6 ]    mcasp->regs->GBLCTL  = 0;       // Reset  \- z  i5 b/ H! ~2 K
    mcasp->regs->RGBLCTL = 0;       // Reset RX% u- L$ X9 O! a% y5 Q1 e
    mcasp->regs->XGBLCTL = 0;       // Reset TX. a1 ~, g3 n/ h+ |+ m
    mcasp->regs->PWRDEMU = 1;       // Free-running1 o% W1 P$ A! L% |0 A+ F
   // configure McASP0 receive registers( j8 I1 k+ i) g; U3 N; n8 ~! W
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- \: K. C& G; ^# B    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. {/ w+ k7 V: Z; w1 ?: @" t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 |9 a6 \* r- s* q9 e; k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 ~% O* c5 H% v4 V8 y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 Q4 c* r; ^8 `& o/ h8 c3 `( C    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 ]5 e6 V& e+ s" I    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 t0 ~" W7 C$ D, \) G9 T& }, u' Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, @9 `+ ~3 p) [* j' W$ C9 `! P3 e7 Q$ R: p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' S- U, L3 s3 x# ]& T8 ?    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. i- H- u& Z) K' M0 b4 `
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ G" w% T5 O* H9 L5 d0 i: X9 H
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 b, L* j% M: x: J
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% E: q9 H' k6 V; |  m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,18 z/ j1 r+ D8 L. G/ U4 v  Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ `, d5 \+ U# `8 `8 o8 l; F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  f/ w( ], H% I2 H4 t0 _
. C5 Q3 v. k' d
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ k9 q& H3 @6 T8 E( N, H! @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- q' s+ B0 ?- L5 u2 W: S0 o/ t
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 p1 t0 U6 @8 p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( }1 k7 Y, E+ E+ K) I
2 O) o0 ^3 J: a, e0 K! P    mcasp->regs->DITCTL     = 0x00000000; // Not used
" K$ \+ J7 M/ l9 n3 t    mcasp->regs->DLBCTL     = 0x00000000; // Not used& y6 S$ i& r$ {7 Z" ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used; h3 V4 }$ {# D1 {9 t5 [7 N/ j. k$ g
/ e' R  z( V& Z" S( H" M, E
/* Starting sections of the McASP*/
' j+ ?- R% M6 r8 k+ @    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- C  b3 n7 N7 M/ L& U9 t. S; @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 b/ {$ m5 t8 D' ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 |) o' a# j; c; U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 Z3 j0 t+ L1 R$ Y- o+ t5 F, x3 R6 J1 e" s/ g2 q' }
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, }; [5 z/ R! t% B* ^" ^3 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* c1 S" U8 {* d& s; s! R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 ?4 M, _4 P* Z. u. k  t* A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# ?4 H+ o, w9 V2 z

: Z: R* R* Z- E5 k0 c7 ~    mcasp->regs->XSTAT = 0x0000ffff; ; S( N0 e4 C. i& {5 X  {. W
    mcasp->regs->RSTAT = 0x0000ffff;
) i( ]1 S/ T6 u. F+ B. y4 V& _) ^! x( o. a' m  ]" G% z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 m0 Z9 }1 N8 u- H7 L' y: B, ]4 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  e) w, w1 v2 Y) }* @3 x0 I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 B! ~1 j6 @! d& x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# A, B. d1 ?) u2 Q, u/ D* ]* C5 K
3 M& i  i9 Z- H* F
    /* Write a 0, so that no underrun occurs after releasing the state machine */$ b1 T9 I: \1 F! V; a- b4 _4 a
    mcasp->regs->XBUF5 = 0;# s+ \- `! M, ^% y! Z. [
    mcasp->regs->RBUF0 = 0;
& [2 S& H' f: A& R- V0 I3 o) ~) Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) w( W. K- a6 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) k# I$ X1 T5 m0 ]0 Z, ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , ]5 e' N% Z9 I2 G9 V# y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 w/ ]8 S8 }$ _# B; P$ K$ \8 v0 X; A
1 L" X% X+ ]3 y- N" o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( v7 W) Q* ?9 `" A( J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 L3 A! w" D; E' N2 f% u# J
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. @( F( o/ Q9 s( E3 X- U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- S  P7 T) B( x) l7 f$ Y- O0 h
# x- w" G# o0 H3 q* Z) E2 `* E
    CSR = 0x0000;
0 T0 a, c( m5 I( z    INTC_INTMUX1 = 0x3d;
  j* _/ w+ h, U6 r$ ]1 W% X: Q    ISTP = (unsigned int)vectors;
5 ~7 R) L2 Z( {8 C3 y1 u    ICR = 0xFFF0;  ' T% E$ r$ a4 Q, R4 V( m
    IER |= 0x12;  
5 X. \2 K+ m' m2 Y% l) J    CSR |= 0x01;  
% k. z! F' y0 Q, O% |& |9 j' R7 b
9 h; }9 P% F, E/ n! Z3 `. n7 ]) m  b3 h" M* o3 I
0 [; P7 i: O: I  D
还有就是两个输入输出函数:
% y' x& e1 `! {; o" k4 A! pvoid output_sample(Int32 out_data)& p/ g$ }$ T  s! }, D
{
/ J: K1 T& x  H  AIC31_data.uint = out_data;  ' Y0 M$ ^) f% E) ~" {/ {( Y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 ~$ f0 X; i- x
}0 i5 L; G& E- Z* M) R4 [

9 i. F( A& I: ^  U# t( RInt32 input_sample(void)
' Z% i5 y8 B8 X* T4 g{  
+ c7 e( J/ Q% c+ ~1 I* N7 V  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. j3 s% X6 D6 y8 N5 M" S  return (AIC31_data.uint);
8 j- p! N* z) W% X}
* D) {4 T3 ^: @& L' X
8 g/ {" i( W" m
分享到:  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-15 07:32 , Processed in 0.043797 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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