C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 {- s# x" s3 Cmain文件:
" o5 c- E* K$ t0 Kinterrupt void interrupt4(void)  6 B2 N. j. e7 b5 r& n% ]
{+ P7 \4 T1 ~, s6 D3 F' i
  Uint32 sample;
6 u7 d* [% t! |' \, P3 H6 _
+ ~" S5 y: E: r* I4 A3 [  sample = input_sample(); // read L + R samples from ADC
. f) ?2 D' v& \, Z  output_sample(sample);   // write L + R samples to DAC # @: X: t& m: `
  return;2 R4 J( D" _% v" J2 x
}0 _! C+ `& ]0 l/ c& T

( D: Y1 G' O! T" U6 }7 eint main( void )
% A( o. U" O1 ~9 l- A( o0 C{6 a, _$ x& r% t3 n
& {3 t- H& @" f
    /* Initialize BSL */
% x9 ^7 n4 @5 {8 g' U2 a    EVMC6747_init( );) M/ g' N9 a1 m
        /* Call evmc6747_intr function */4 H& N( u3 ?3 s* e: l
    aic3106_init( );
/ D2 j: o$ U/ g6 Q' {        while(1);
( ?2 c5 f# m+ V}
& ?( x: ~6 s# {* E/ O. Q7 w; `5 j) x2 Z5 J! T+ Q2 z

6 R1 I# {2 k3 K3 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 ^9 a, w; p, F7 L. a
/* Initialize MCASP1 */) C" z& w' z/ c% p) d; x) \
    mcasp = &MCASP_MODULE_1;2 ~$ V8 l% R$ q9 ~! t2 m
    mcasp->regs->GBLCTL  = 0;       // Reset  f+ V2 S4 ?# }) |0 P
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 y! e/ ~' D/ t' u% b
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ B/ H. a4 ^# d) d- W6 D
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 h# c+ w- g* j# Z+ X   // configure McASP0 receive registers
, I( L2 {; T5 b: V7 w( L    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 w( U/ r6 ^# D8 [% O8 m
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 z3 E$ b( J8 V  C
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- V" b/ H. Z4 o" j7 a  g- S
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 N% S2 q% ~+ B3 g9 \, ]9 b; I) S& s    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ s7 o: t9 U3 q/ U    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 k% E" y" q6 q    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ W3 s/ `$ W* {8 N$ ?/ c$ e8 T    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# u! H0 m! U, W% k
4 B( D3 {& n: v" N( M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  C& u: O  V& ~* \4 [+ t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 g8 a( i7 ]8 y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 V2 b2 @* u1 n- [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 Y# U" j$ R! H6 v$ J* i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! a  r/ u; n- w; ~/ C4 L1 E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" x' A  B3 {- S, _" J0 V
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" I3 l$ S; ~/ n( X) ?; l, U
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 l: x. m% j& o, S  B! a) B1 w0 B( k( ?& m# H* C" O; s5 @
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ m3 U6 D  ~& H9 Y, H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 |$ d/ N* K( @" e
    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 w! `2 Q# y2 B* I, i8 r; N* @+ s    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: |6 h3 J( Z7 N% @
& W4 E. D' M7 A: v
    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 s# {+ o2 N2 b    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 ?5 G# o3 `: V4 V0 R# F
    mcasp->regs->AMUTE      = 0x00000000; // Not used# E' V' i/ s& {
' f  p% [# w- H
/* Starting sections of the McASP*/# N0 ]1 Q$ c' b5 p1 p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " p+ H+ D0 v0 F1 R9 V$ U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / _6 Q2 X% h8 |6 ]% j1 j1 Q  Y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 I# v) r- J1 y4 ~2 S( G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ l- o6 Z) l4 p4 ^
! t0 Z% l' o+ p; `9 O8 G- G    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 p( m9 e8 j) A) [' U! M8 x' I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E% h; G9 R3 |" W6 c; v/ M
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! E+ T; e# k  X# a* [4 O6 W: h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 M# V  t% G+ s8 {. v

, v' W+ p& r- E4 l2 X& z, C/ w    mcasp->regs->XSTAT = 0x0000ffff; + h! h# e1 l' w* c. I6 K0 F
    mcasp->regs->RSTAT = 0x0000ffff;
! K. ?$ B  k+ o
/ u3 {  n" U+ `    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, O) f  m' }, `' s5 Q$ ~7 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ N2 z' |: D0 x: a3 g3 V# @    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - J" ]  E# t1 D) T* {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ r% e, m/ B6 d. a

* C. n- ]# c4 p  Q3 l; o" `1 }& k3 E    /* Write a 0, so that no underrun occurs after releasing the state machine */. P; k3 Y9 s9 @# \8 S: l0 h% J
    mcasp->regs->XBUF5 = 0;7 w) j: _5 E- {8 @! J2 V
    mcasp->regs->RBUF0 = 0;
3 y( F9 l% {( g* u, N: X1 m" ]' ^8 j' f* X% z& x: q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " @7 |% H6 c4 v  H- p& k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" b3 ]4 T; ]( P# y. t/ ]    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 R  {6 F% a* N, L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( J; M2 H3 E* Q% F! G0 ]5 d5 S0 j

6 `5 G  N$ @. S    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ K4 W+ J; s. o, I/ z; d$ V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; H+ D. e2 ]+ ^; i! d% {    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& k) w- y' ^! g: ^# T; n7 ]  }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. a+ c# O: Z; c" V& M, z( Q6 K

/ f# o5 g9 h; `# W    CSR = 0x0000;( ]  ^: i* g3 g; S7 w2 Z$ n
    INTC_INTMUX1 = 0x3d;: F8 T# M2 q. C& _' k
    ISTP = (unsigned int)vectors;
+ C3 K. A  S/ \# r7 w! n3 l    ICR = 0xFFF0;  
# \8 r& W* M+ P    IER |= 0x12;  
( U6 m5 u- Y5 y. M6 s( v    CSR |= 0x01;  , K0 Q( j6 }$ v- w$ Z- g( O
$ N# q5 K1 o  v) E
8 |" ?7 J" I; q9 z, x& O0 g

9 W6 c# D; A+ w4 f, C还有就是两个输入输出函数:0 @: Q$ T% D; m; y& [$ _2 i; N5 a
void output_sample(Int32 out_data)
+ T$ q) G% k% ~{- H( C' n, Q) W. \
  AIC31_data.uint = out_data;  
& f0 @% W7 J5 V2 H4 z  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ ^/ |! p( S+ K. v3 B: x}7 H. \# b7 B6 t

6 T, d0 u, C4 ?Int32 input_sample(void)( O( ]# R  o# i
{  
  P# r! X& t1 X9 B7 x5 H, {4 x; Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 q5 n0 q' K& x( n$ h! x  \' F9 k9 d! K  return (AIC31_data.uint);
; J& F$ d- Y. h) F}. {/ S- d0 P( ^- c

3 j4 x; E' a& G
分享到:  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, 2025-11-22 07:33 , Processed in 0.056154 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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