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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 a( P2 a, d: _* P2 T6 Q( B- ^) v0 {9 C
main文件:, H% ~/ y7 n( M4 _" Z; X
interrupt void interrupt4(void)  ( n$ ?, b& ^) ]. Z* `4 D
{
" t" V! [& I  @4 o$ {  Uint32 sample;
8 S$ V! t; P, l! V  m/ V8 m( r, I' ~: b. {4 f+ U+ k
  sample = input_sample(); // read L + R samples from ADC. J" H) F! O, h5 n
  output_sample(sample);   // write L + R samples to DAC
4 j8 u; P' y% ?6 f8 S: {; ^; q# j  return;3 _1 E) ?4 U* C" @4 d0 m! D( I7 [
}
8 P% \+ s: S, P0 c; l7 j/ J/ I% g. V- p- S( d
int main( void )
2 f. Y1 z+ j& M" x' u{
# |" J% L# p8 |1 t' L3 w! K  t' [& `( k$ u6 f6 g" P& A
    /* Initialize BSL */( j/ F' Z5 r- p, ^# R* y/ E0 ^
    EVMC6747_init( );( F& K  p" _, T- `
        /* Call evmc6747_intr function */' U# }! M% L( }; P# w4 u6 u
    aic3106_init( );0 O8 S7 Q& Y& w& p2 p# a/ E* z. o
        while(1);
# j6 q; ?! N2 I0 ]: w% D6 U% ~7 z}
3 a3 H5 o; e3 r  Z6 t3 t
* t: N1 G9 M. C2 c  s" m
  c- V  i/ L, Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ f9 a  l6 S: q( A$ z9 w$ f/* Initialize MCASP1 */8 m! |( Q/ T  M4 b; Q
    mcasp = &MCASP_MODULE_1;
; @0 V* f) n: S4 l" x/ |) E    mcasp->regs->GBLCTL  = 0;       // Reset& o) U  j! d0 S
    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ |9 e. Y3 n5 u: I% a: @    mcasp->regs->XGBLCTL = 0;       // Reset TX$ B# c& [7 B8 e
    mcasp->regs->PWRDEMU = 1;       // Free-running& G( _3 D+ U( b* o) k  ]
   // configure McASP0 receive registers
+ Z- ?! D  L1 d; H5 p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% r) v9 D) G0 X- m, F1 K' T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  U8 Q% H! g0 Z% d! ?6 ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& {$ P. h/ l+ j7 _    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 U/ B. |0 X6 J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% Y" I! g7 n% j* h
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) ^9 V3 g" A( `. s+ C4 h5 \; ~    mcasp->regs->RINTCTL    = 0x00000000; // Not used, e9 c  s" w; f- L0 m+ \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, W& _$ A; O: ?* m/ f  U5 s% U4 o
( a  A- M4 Q4 T5 N- j0 g    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ G. t" `2 v. X/ u; G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. W8 a( [; u' P: h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- T. W) i) k4 @% A) q) R) p4 M& N
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 h" }2 R# M: W8 w7 U) G    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: }( n5 Y" f; ?- \! H
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* w6 `; u* }6 {' N# `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 K, I( N& s8 H. I  s( J4 Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" ~: u/ s3 s( N: H3 @. G. u
# c" E1 d& y: f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  c/ z7 P5 G! y# J- G/ P
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 R# v) j' a" s; E; I
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 E5 i1 j: T4 W$ ~- N- \  R
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ I2 O3 @9 O" t

7 }  U+ ~$ h3 |% u* w! p% Y    mcasp->regs->DITCTL     = 0x00000000; // Not used
# W2 \- X% k0 Q& N2 ~. N" D" u6 V    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 s  N& }" K! B! f2 H. P  i) g    mcasp->regs->AMUTE      = 0x00000000; // Not used3 a2 e- i! N. C, D
) S9 R8 ~, d3 s( b) r8 h
/* Starting sections of the McASP*/
* X# a2 A$ a5 S: K. A2 u: v8 y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; k) B- X3 n7 b( A0 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, H( M. l' ]; y5 ?( G4 A& |    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 ]& _/ p, K$ q2 s2 C% ?3 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" z/ e% d' U4 L! L# O4 Q5 o3 r
5 D6 U2 `( v  Y& `6 }9 @5 K
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! ~  ~+ u; X( D6 R7 R, X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 v9 e7 ^% Q# l3 h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : f; c- _5 |2 |% X) s; t- p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 @: w# n) A# E% @' u/ M; L; D3 V. x( d, P
    mcasp->regs->XSTAT = 0x0000ffff; . v3 }' f) U5 z
    mcasp->regs->RSTAT = 0x0000ffff; 5 x8 X( e: \" n- D8 t4 I+ j
8 J1 R8 s' j: A, G8 p
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, a1 T: g( [! c5 ~, [' }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( z6 Y) ~* J/ A( j    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   E( x3 K6 {5 W' E2 y8 k) a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 @, v! T* X& R  O' j' R- K9 F

, J. I2 u: u7 M' ^2 W    /* Write a 0, so that no underrun occurs after releasing the state machine */& Z  w* F" o. n8 H- p: E: ^
    mcasp->regs->XBUF5 = 0;7 T+ C: `  b. u( o
    mcasp->regs->RBUF0 = 0;& w( @) d: l5 \; N  o) X
; U& y1 U; v7 ~  D  j- \$ k
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 f' c* x" S" k5 X+ U' X& ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 _3 Q5 U# N* M9 W$ v
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 j( |" i. v* J2 `0 q0 y9 l+ B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 C) ?4 p5 }' d; l! i) g: V$ K
5 j/ `: Z/ Q# s% k5 h) a% S# {5 r' b6 F
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 x! E1 d# u! u2 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% R( W- v1 L2 C, p7 n    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 l1 ]: O6 K3 p. M* a+ \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* _% c0 e5 E8 x0 k; U- U1 o
4 t$ l4 D5 p* b+ R/ T0 C
    CSR = 0x0000;, R7 J0 P1 e1 U7 [( S+ z' a8 D
    INTC_INTMUX1 = 0x3d;2 M$ P$ s! @! G1 \
    ISTP = (unsigned int)vectors;
" ^+ q8 @$ h' D, a+ j! P    ICR = 0xFFF0;  - r  `0 B, \% i& U. k6 l! S. b
    IER |= 0x12;  
7 G3 O/ x3 L8 K& W3 b2 X7 u    CSR |= 0x01;  & M5 E- k" c% A" V6 W$ Y
5 p, S2 _# ^+ i; I0 k! h
% r$ t9 |; R9 V4 n+ O1 e
0 z  T$ e& h" k7 w9 T+ j9 D9 f, I
还有就是两个输入输出函数:
4 n$ y  Y3 z5 }/ c! x, r! q- {( Rvoid output_sample(Int32 out_data)7 w$ b) w2 J+ A) B4 d
{
. A; s" s, {- K! B+ U1 I- P  AIC31_data.uint = out_data;  ; q* M# ^1 _! g* K  T& R, M0 G* t8 {5 i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' C+ Y9 o* b8 l! \% G% j7 k" F, Q
}- [( r. M) a9 H

" E- L9 {7 E4 p8 k! |) ?Int32 input_sample(void)5 ?  E) f3 @8 s5 O& v9 G
{  0 @. W& {6 s% V+ }! G
  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 ?; f5 n; Q( G5 b8 K
  return (AIC31_data.uint);
+ A, }5 V; }2 o- F2 L& G}0 T& X9 i, k8 U, N
* `) g* B: D0 r0 z
分享到:  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-4-5 05:49 , Processed in 0.040520 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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