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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 p. q" P# @+ i. \! `# M6 C: Vmain文件:6 L+ y* c9 U, r  ^6 N
interrupt void interrupt4(void)  
$ I% ~3 d; ]: I, G# k. ]6 U{/ H0 ^, @( q% ~- }5 v
  Uint32 sample;  ^. b) V5 x2 _2 P, V3 `

8 D& E" Y& t, f& X+ P  sample = input_sample(); // read L + R samples from ADC
2 W; Q# h' C# Y* l  output_sample(sample);   // write L + R samples to DAC
/ J- }  K7 u# r  return;1 _8 ~% k% q% }4 z- E/ d9 y5 i
}$ _4 x& R0 j( ?4 q

5 W- x, |3 h" W- l- `int main( void )
4 g% |& j  x3 c/ w. _$ K* d. P{
! h+ P- Z7 i; u4 n" R* B. C, G, ~. _1 X) K
    /* Initialize BSL */
0 x- Y2 C% D! N3 ^' E" g* `3 S    EVMC6747_init( );
9 k; x1 O9 E% S  K0 w* g$ M        /* Call evmc6747_intr function */
! L  A' }2 ?3 d' B* w+ Q$ c$ t; X    aic3106_init( );9 o( Y$ L( v) B3 [! s
        while(1);1 r+ G$ G+ ~; B, m8 d9 ]2 }
}
- \$ N5 N$ B' |8 x6 f
, G* z) E) `2 W& i# O/ ?0 S3 r' [' Y
9 h7 {8 V- X- x/ W2 baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ Z: h, b- t! J" ?/ n0 h/* Initialize MCASP1 */) X0 O) I6 b3 _9 [1 o/ ^" D
    mcasp = &MCASP_MODULE_1;# {& |! c7 W. h* |1 e- P
    mcasp->regs->GBLCTL  = 0;       // Reset8 J3 q3 T! d3 B8 N
    mcasp->regs->RGBLCTL = 0;       // Reset RX  i. G+ b' R; S& Y5 _' T) U- `
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ T# t$ d+ G5 D& D1 O+ B; H/ A& Y6 ]% c
    mcasp->regs->PWRDEMU = 1;       // Free-running) n3 z( j- I: W1 H, J
   // configure McASP0 receive registers
( a. B$ X. I5 u9 n* r    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& G, C+ o; d9 d' Z5 a" d
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 Z- [( W2 ~6 {7 |+ ^! ~3 L
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' U3 H( m- c0 D  f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 ?: W+ ~6 D  c) x/ w
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' j1 O9 d5 ?7 M4 w3 `* n
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ H4 ?1 s  j* `    mcasp->regs->RINTCTL    = 0x00000000; // Not used) I6 O* m9 o2 V) v- y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ ], r5 M$ }/ g: {/ n! r& `9 g; e( p+ n) D% i* A: l( q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- b- B; q3 D* \8 Y4 c% O+ R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 X9 b3 z* a: A7 p* j! W
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ t; n+ Y7 Z& a6 h0 J$ k# r& k# U    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 j# U0 a) v- ?* V0 G% n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ W! j4 k4 i) O    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 \# N( W3 L! w4 F9 Y2 R( u7 L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 e: Q. |7 S& C8 H7 J
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 n! [* `9 j9 C# i, E
2 X% T9 c8 f9 H9 `- V5 |. x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 Y% d) o$ Q: S& J7 [" S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 A' s+ Y# ?0 U& V$ N" J
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 t' ?. P4 v: K# i3 T
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: t5 E7 Y! ~0 R* A8 C- |  r# ]* U9 k" P
    mcasp->regs->DITCTL     = 0x00000000; // Not used9 K! J# H# z+ b* O; j# k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 q+ X2 q: K- k/ |% b4 y' A
    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ I5 f3 M" f. T4 t  Z
6 N' q; m& ~) I0 o1 }( i7 E/* Starting sections of the McASP*/8 k  H, n4 i7 W- H* f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 H/ ?8 g! \  j% Y1 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / \/ z5 k# z0 M; Z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 q. C/ e4 W) L0 W/ F3 x* V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' G/ k; v" F  ]; ]  K
3 x9 o4 G2 p1 ^" B+ ~  I  Z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 i+ \7 n. p. I5 p$ I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 R$ e8 a7 T" F& t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . V; h% i4 E4 H8 m1 Q. J6 R+ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 y! a1 W  y! U0 u  r; ~; h
" c( b2 c+ i+ ]$ U' P- D$ w    mcasp->regs->XSTAT = 0x0000ffff; 8 x4 Y9 q9 p  ]& |- |% [
    mcasp->regs->RSTAT = 0x0000ffff;
! d! N4 W  K0 P- X4 e1 J; w* }  D, w7 z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 K1 c) W7 i- y$ j. ?, W8 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, ?9 M3 n$ z: \' v4 o- j* R9 X- `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( ^$ I' G) j" M9 n  D* @# \, K, h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 v6 x/ s, z8 G% L  S! g" e# z2 m1 w4 \5 s+ e: g1 u
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 {3 ]& x7 ?( K    mcasp->regs->XBUF5 = 0;
% U& Z% ^2 g0 p- u3 T% c! K    mcasp->regs->RBUF0 = 0;8 ^- ?9 }/ d  O+ V5 p$ {( r; L* Z* _

0 r& W2 n2 I& P0 v    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- [# ]3 x! R4 I8 M: K/ c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 l; J! R% G7 G+ w/ }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* b  K5 Z. L0 p( L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 J6 r0 d  m8 B- [8 k8 k+ u8 p( y/ ^! C, N0 k1 f" ?2 Q& Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; L9 x1 O* U' V2 A' I9 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 F/ ~# z# m( a- s0 X/ |8 V    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 ~6 q7 I! c" m0 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. g' P  ^" p8 f* [

$ c% I6 e. J( j* A& h/ o, I$ _    CSR = 0x0000;
, Q5 n8 w2 G8 c* _9 c    INTC_INTMUX1 = 0x3d;* H7 ?" e- `5 V! B3 I! H$ J
    ISTP = (unsigned int)vectors;
( M1 L. i5 w3 d7 w5 b1 k    ICR = 0xFFF0;  + Q' _9 E3 L% T4 B1 _
    IER |= 0x12;  
$ ?. u  G# j" w1 @/ o9 r9 x. j    CSR |= 0x01;  
' Y* L* m) p7 O. J2 f4 r0 C( |% |7 r' _
% W6 `8 L: H0 w3 L6 L9 p) m

+ h% H% J4 I/ `" G' d+ y2 I还有就是两个输入输出函数:
  |: M' q: z8 qvoid output_sample(Int32 out_data)
, `$ Z  k, x4 X( @+ ]+ i! Q1 Z  a{
5 A- W3 ]! X: Y5 l& j  a' I2 v  AIC31_data.uint = out_data;  
+ x, G5 }+ I, g$ G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 V3 I* A; z9 Y3 x* d0 W}
- _5 J! W" {( l* {7 H+ ]) w' p) f& G1 s4 u* K
Int32 input_sample(void)/ h$ a: X5 @, V7 ]) D
{  ) ?- ]. d; f9 i3 u& I- m
  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 ?5 y  V7 D7 U; Y# P; E( p# v: d$ x
  return (AIC31_data.uint);
2 s3 ~' o& p7 q: ~}
, ~, {* b4 ]& w$ x5 @7 F+ W1 @
8 |5 E8 y: R7 a9 u/ |8 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-9 04:59 , Processed in 0.039901 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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