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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) f0 o$ M! b& Y9 F4 Lmain文件:
# j$ E) Z0 x8 C( d3 Einterrupt void interrupt4(void)  # d4 Y; S% W+ l( L7 D1 i0 Y- m
{' u' @; q8 w' w3 W: P
  Uint32 sample;
, L. ?3 T( x- O7 N( h9 p
$ q' f7 X1 l& s4 s; ?$ k  sample = input_sample(); // read L + R samples from ADC
( k  K& a7 H# Q* D7 a5 C  H  output_sample(sample);   // write L + R samples to DAC , H& e: t  _* ^3 q& v- y  i
  return;
2 o$ K3 U+ d1 Q4 ]# o}( B9 o4 Z; y: N+ f7 g( h1 p+ K' H) }$ r
. \  z- |2 W0 a4 D9 [6 j+ g9 O' m$ b
int main( void )
* A$ b! X4 V4 [# W{' B& d5 {* j( O6 P. j. P! n8 ~0 c
8 `2 }1 O* |4 k$ _% T
    /* Initialize BSL *// D- f& l/ f( t
    EVMC6747_init( );
" a( t9 P, d$ t        /* Call evmc6747_intr function */
0 N3 H  _& [' ^4 L) D0 r    aic3106_init( );
$ e4 E! ?  e; _1 C) v        while(1);  s+ U& ?+ H  B& e, I5 j) _5 @0 I
}) H& K- L7 t) j0 e1 S

  F( V) X3 b: O5 e3 }; Y$ I6 P$ U8 F8 R! Y. U, f' ~( B# F4 I& f, @- c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) h8 C/ ~$ H, J5 ]7 v
/* Initialize MCASP1 *// A, d4 K2 U. N3 x" X# s
    mcasp = &MCASP_MODULE_1;; t! c6 m" u/ q* R+ R3 \
    mcasp->regs->GBLCTL  = 0;       // Reset
! }& A4 m( P. L: E6 q3 T5 d0 u. N    mcasp->regs->RGBLCTL = 0;       // Reset RX
. b9 z" T7 R- I0 g( {    mcasp->regs->XGBLCTL = 0;       // Reset TX
: P1 Z) G8 N4 L5 f# X3 a# C2 {    mcasp->regs->PWRDEMU = 1;       // Free-running
- w) b: w- }: J# J( E   // configure McASP0 receive registers
% c0 O  K: w' z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ b# L* i! V4 V; f$ X- M& _; X    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 f0 [$ W& f- q! E) }+ E* @+ C7 i4 p
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 b" `5 l! N8 J. k- S
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): p! B  H; |% ~3 r8 F
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 Y# i! {) k& N; J$ b    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" J! C6 e0 C) n, [, B7 z4 n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" w- _5 I! T* g. E) \8 _; Y  x    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: z9 o* {: n+ j; }$ Y2 r* R& t5 s8 J& ~7 ^
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' `! |& {: ]" ]. H4 C! w    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 ]2 _# n- y# f/ S: Z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; l( L7 ]  S4 L/ d    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 Q2 y7 d8 z" U; {* A5 w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 V4 d  U+ p; n8 {& }7 m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( J% I3 X/ e$ [0 K& t# P
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 `8 D. _- S3 o4 q+ |( o  k, E! c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! Q9 w- G# v  \' y
: @* E! D& S0 r/ T
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( n" d2 O, R7 a
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 t* m4 S4 O2 U- e    mcasp->regs->PFUNC      = 0;          // All MCASPs8 i4 A7 @, g4 o, N) s
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 d; `3 F0 p( o+ ~+ U
. R. ^$ h, A, ~
    mcasp->regs->DITCTL     = 0x00000000; // Not used
( X7 g  @: M* G# c5 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 C+ N- l6 _7 k8 g# }    mcasp->regs->AMUTE      = 0x00000000; // Not used+ W( C' F# e0 W- _
8 _7 g2 U; F) c6 F6 ?+ L5 R2 N  r
/* Starting sections of the McASP*/
1 D: \3 |/ ^2 o7 N. r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, Z; d- q9 V9 Y6 q! D+ \9 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & b: s( b- f6 J, v# `: e% S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 T+ E0 q2 k# c! Q0 v* C9 o( `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ ^& A( k" q8 Z+ V$ l' \1 p$ b
* L. h/ X  f# c    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 E. w, D1 e7 E: v. j  L; E9 V& B3 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 v1 \- T# }! B, Y7 U( g
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 Y) A7 g( j/ G7 T2 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; [2 T! _! T& x0 j, p% Y
; L5 f2 s$ R& `/ U
    mcasp->regs->XSTAT = 0x0000ffff;
$ S3 ?, K( ^& }* l) {    mcasp->regs->RSTAT = 0x0000ffff;
: e; j( A+ p! {$ B" c4 y" I- W( }; a+ c
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; u! L7 c$ v- {, I8 J: |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 n" t5 _5 v) ?3 H3 J2 t, x    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 j' L0 v  X: G  w2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- M9 c$ k+ c" P, f
9 D1 `3 e5 P- `. U    /* Write a 0, so that no underrun occurs after releasing the state machine */" B# G! a$ q% G! ^8 o0 G
    mcasp->regs->XBUF5 = 0;
4 b2 i( l2 z7 D3 B    mcasp->regs->RBUF0 = 0;
, }9 n0 P* p* {: J( s4 [4 u- {, e7 X  s
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 ~2 u7 m9 a% @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 i$ Q- Z$ ?$ l4 ^0 @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: u5 D+ x$ h. g  ?: D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' a  y+ `# s3 e* P& d) G/ S& Z+ e% O0 A* p6 B
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 x/ J& g$ U$ `3 ?4 M7 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! s( u8 o  x4 e3 D9 }' f+ x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : z- Q, i4 V; g4 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ M( \5 j! H+ h& a5 d; h
4 X* e/ {5 i' X! ^' J0 [! l& b+ [    CSR = 0x0000;
! r: |; v: _/ z$ A( \    INTC_INTMUX1 = 0x3d;. B/ y) C5 t6 R& E0 P2 I! {  n
    ISTP = (unsigned int)vectors;8 f1 B; I, A; }  L+ {' E5 J
    ICR = 0xFFF0;  
" k+ P7 r6 C, H; R$ r    IER |= 0x12;  
7 F+ ?4 G) O: Y( \7 v9 F    CSR |= 0x01;  % m' l9 H  C/ A5 I

7 C* t9 @- Q, E! L2 F4 w7 y6 U8 Q9 f8 L1 q( D' @

2 U; e: _  `( r还有就是两个输入输出函数:& @; Q" S7 m2 `! D
void output_sample(Int32 out_data)
# Y, @; D1 y3 b6 y{; M' l- V' G1 [5 A, A
  AIC31_data.uint = out_data;  
) T1 [4 K- ^7 c2 j9 D7 [  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ K! p4 Y: C! I
}/ q5 _: I) E0 I, _% S4 j; u
. ^$ a8 }1 \# W% g* l% d
Int32 input_sample(void)
1 r+ `* f. _6 j9 J+ f{  
7 r) q( O+ U0 p1 ]% ^# |- l6 e  AIC31_data.uint = MCASP1_RBUF0_32BIT;( Q& n8 j6 {% P! M: q
  return (AIC31_data.uint);
  A2 x2 R  @) j+ B$ o4 Y8 D1 V}2 V& L+ D. r% l  g8 y0 _8 @
; F! I$ `9 `0 G* w) W6 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, 2026-1-22 02:49 , Processed in 0.044689 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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