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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ m! t! i) A6 ?" c$ E' v) D0 T
main文件:
2 P1 ~3 M0 S8 R: v, h2 {  [$ jinterrupt void interrupt4(void)  ! P+ J* R( B9 z/ H! E( ^# o
{
: C( L4 n) V  u$ `4 s" n- f- O3 d  Uint32 sample;! F- N- {2 ]' _! J0 D

2 y, z; g3 u2 e# ^( p  sample = input_sample(); // read L + R samples from ADC
' _8 ]9 b* d4 M$ Y  output_sample(sample);   // write L + R samples to DAC " M% ^- d7 I6 _& U7 z
  return;4 r8 `9 B, ~( A* r% `
}* i6 F+ b: G- b0 Q7 f, L

. I* ]. k3 t( w* Z+ q9 aint main( void )
( W5 j; W5 i+ A* Y, v5 A; B{3 H* F1 ^" l3 Y! ]
# h% m! V- L; u( x
    /* Initialize BSL */
4 h$ e. Y( S$ l; ?9 T+ v) r7 U    EVMC6747_init( );
& i' w- I' G9 Z+ F5 y        /* Call evmc6747_intr function */$ l! K: d5 E$ s, B6 O
    aic3106_init( );+ K( z5 P: z( ^4 j9 T
        while(1);* P$ p' f, `8 F9 ^; U- o6 q
}
( I# s) ~+ ^+ p, T1 b; P1 r0 v, @0 i

! F3 N% U. a& iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! l" J4 r2 n+ N3 A$ j. h
/* Initialize MCASP1 */# c+ E% Z4 ]. x& h, Z1 o0 v
    mcasp = &MCASP_MODULE_1;
$ i& C: {# A0 e    mcasp->regs->GBLCTL  = 0;       // Reset
+ \8 m2 O- }! z$ ?) [5 @    mcasp->regs->RGBLCTL = 0;       // Reset RX% k0 u) d: u$ G8 J: K. F: U" u
    mcasp->regs->XGBLCTL = 0;       // Reset TX
: j/ O: d: T* E* @+ V% s    mcasp->regs->PWRDEMU = 1;       // Free-running
# O- |9 t# D$ N2 E: m- C   // configure McASP0 receive registers& l& p- b% u8 E- p& @. J/ L
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' k$ R9 `2 H. v% Y" K
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# q& W7 I, \5 Q) F, U9 i    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 _/ `& L/ y! M4 W/ ?! h3 ?    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  X5 f% `; s; q) n; x2 y2 C8 l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 v& T9 ~! S- P$ {9 f" @6 E& [! a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 S: r6 I* K: S+ v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 o/ ~6 ]' |" U* _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 {# H9 k& D( ?3 L
7 Y8 U5 S$ G) f# K: v    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 L* c- ?2 o% u0 u$ e* o    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ o# N4 O, h3 M2 x( H+ H4 O9 E; t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* K2 P0 P2 `$ ^  z7 J% F4 z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: C0 t6 I' T- E/ a
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 i1 D; j9 P% N. x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; a1 I% F& P3 ]$ f    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% V& A. a) a; R4 @2 a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 S, M" J" K# |  N1 E* p
; T" }- b* T) q2 {, G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* S3 F. }! r. N( n  b  P0 m    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 e& F3 H) }  b# s" T- ?/ X8 r3 G
    mcasp->regs->PFUNC      = 0;          // All MCASPs' C$ C+ g+ C. [' U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" O3 _' B' e5 j6 t5 L: n* t7 b) S6 e( i7 B
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 t- n+ b8 @) `# {    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. J. ~( C8 p, r3 V, |6 v    mcasp->regs->AMUTE      = 0x00000000; // Not used
% V% ~/ }7 y- f7 H5 M0 y  n4 E$ g8 t
/* Starting sections of the McASP*/
( q7 p# k, U9 X2 W    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& D: {& q; S1 d6 {5 T; X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , `0 r0 F# O. Q1 T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % N) ~( u3 Y) [2 ^% F! S0 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- _6 P# e. Y6 K# Y: Y# D# }5 J, U! O) S, e  t% c% c
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + g7 c- L8 P: E; [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, e' n  a1 s4 m3 H$ n! d2 J    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; p# P% e2 C; f  M% I" ^! Q) S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 [. O& T. @$ |7 K' c

% s* W2 \+ D/ n6 V# u* T$ q    mcasp->regs->XSTAT = 0x0000ffff; * v( v' a! }2 Y1 Q
    mcasp->regs->RSTAT = 0x0000ffff; 6 |2 `; g/ J& M/ o6 R- ^8 c& I
+ N, r' S, ~  E6 `% E5 X+ _: r" h
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% H  I6 f3 P# K* O2 \0 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 k3 y: w! x. D# `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, S8 I; U7 }/ p9 W; c' q' k& I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# f  y2 v7 M' E. _' L
7 Z: }7 |3 e$ x: h' L8 ]/ ~+ x/ N; v
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 k- b: A1 S5 I1 H$ X
    mcasp->regs->XBUF5 = 0;
' j/ {1 M0 A5 B8 A- W9 [$ ~; _8 \2 ?    mcasp->regs->RBUF0 = 0;- E  `& z: S: j$ z
; d3 `( O# Q0 C3 |: ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* P- f+ u( L3 v6 N7 w5 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 m& v/ r! q: ^3 k8 m) w. p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 ?3 P8 @9 N' D1 O2 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ e) h4 t6 V! @0 m* [, Q4 |: o
- O% F' M$ l( U$ p& i4 @3 z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 \% ~# K" t5 P8 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 {# P: \2 ~( v, r( ?( H5 {: ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  M( M, H, S% Y1 {% @# M: k0 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. m7 v  Z/ N! h# P- H7 q1 `7 Y: |1 }3 `8 C$ _7 b
    CSR = 0x0000;. \: c+ R$ e1 y8 {; [8 c! \( R; }
    INTC_INTMUX1 = 0x3d;
6 ^) C6 `* n) x! H( w. J" m  [  T9 R' _    ISTP = (unsigned int)vectors;
1 a# O. }) e; ^* T    ICR = 0xFFF0;  
: J) Q, \& F/ P3 Y    IER |= 0x12;  3 j3 q9 c( s/ l  `6 U
    CSR |= 0x01;  1 I$ L+ Q, t9 N$ A/ b" ~
" u0 S( _8 ~3 N" Q  @: B7 H

. e0 v7 v7 }  S; x; z: F+ z' S* ~( B
还有就是两个输入输出函数:  L- z  W1 `% Z2 G
void output_sample(Int32 out_data)
+ Y$ f$ p/ q' w{! M6 f9 k( p' |' k' h) T$ d
  AIC31_data.uint = out_data;  3 \( o( o" ^- j4 ]
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' K8 r* K" G6 D/ |3 v: |; i}7 H$ z# Q9 p; y# N" C: u

7 i/ Y; }7 Y: S( b+ v0 jInt32 input_sample(void)
. e) r5 K! ]/ C: S' l9 _  Z{  $ d  v8 |4 Y! T
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ C' C8 Y  `" |$ j, b3 ^  return (AIC31_data.uint);
$ E6 @. K  U* U2 p}
* _$ K7 T5 C+ N+ K% [
' k3 F0 r3 z; G5 d
分享到:  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-27 01:19 , Processed in 0.047845 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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