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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 i# Q, M3 o% m5 ]# y6 j
main文件:
7 R! f3 @/ P: t7 M# d- Jinterrupt void interrupt4(void)  1 @* {1 Z2 o0 H# y$ U5 ?/ @) q3 i% h
{9 Q5 X% s- H9 k7 A( e
  Uint32 sample;9 M* |0 z# M0 P/ f
. U( l- E  D7 N/ e( I, Z
  sample = input_sample(); // read L + R samples from ADC
9 v, l7 b  o% q. Z/ e  output_sample(sample);   // write L + R samples to DAC
  T; X2 _  n$ u/ h  return;
# K5 U3 y$ _) R0 t}) P( C3 S0 G% @% h5 u( [0 P9 u& r

# |6 E9 x6 G. Q* V0 O. kint main( void )3 R# I7 B* ^  j
{
7 b6 }( s; V9 i4 r, [$ {) F+ R8 e* E$ U- W
    /* Initialize BSL */5 Y- _; x0 S% f0 O
    EVMC6747_init( );
! k! _4 j; k- U1 C4 F# }1 y% H3 a        /* Call evmc6747_intr function */* i4 u0 S- o2 ^8 ~9 O0 z! G
    aic3106_init( );
( r( g( a7 m! K/ E        while(1);
( C  O# F/ e; ^; Y: N  s2 l* d7 T}4 z* K3 t; ^) s9 \, l5 x  l9 p4 ~
! H/ q; u$ G3 q% |9 F% D  f# g5 q8 u

; j! {/ O4 H$ x+ O1 haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! b5 w2 P8 C) @# S% y# v/* Initialize MCASP1 */
8 R( U, Y5 K6 X8 V' v' a    mcasp = &MCASP_MODULE_1;
6 E5 c( C  b0 E6 U! p( g6 q    mcasp->regs->GBLCTL  = 0;       // Reset
+ F( v) o& C3 b) J( C  o! g3 a    mcasp->regs->RGBLCTL = 0;       // Reset RX0 F4 z! o$ d- O% Q1 K
    mcasp->regs->XGBLCTL = 0;       // Reset TX
* r6 u: O5 |  f0 @% m    mcasp->regs->PWRDEMU = 1;       // Free-running
8 Z! x/ j: Z1 e/ h( B8 I6 c1 J4 |   // configure McASP0 receive registers6 A6 F- y$ `8 ~" u
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ e- `- ?, B  i, G4 ]$ G. u7 d    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 M% }' c  Z, t: y- H    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! e; E; b1 }$ p6 z# k
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 w7 f0 K% z7 m1 ?
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); i; d* C/ ^) B% S1 N/ x+ Y  Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: X7 S6 \0 _2 t- P8 J( a2 P* R    mcasp->regs->RINTCTL    = 0x00000000; // Not used; P% \: ?5 h1 X, o# y( f  `
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 x7 h/ y% i$ o' n: j% C
+ i$ _% |7 P! j; m    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* Y  |6 `' \0 e: l
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* o; {/ F* Q# N* t, X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ o8 Q, ?. p9 C$ X$ @. N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, M8 S0 @+ h( z. ^; n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( t3 [: H) z8 \: y7 U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* ]. i" i. i# A% h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 d8 ^% _# W( A) ]/ I/ u4 f
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# o7 |. i5 Z% i7 V% S

- A% [! \+ R" g# O! C    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: @- y/ g. M% e1 M* v    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( c" |* h! K3 p" T) k
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# K: i% ]; Z* ]3 n& ?6 `  I3 T    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 L' r1 y4 p+ b, E
; ]3 h( U! Y+ d    mcasp->regs->DITCTL     = 0x00000000; // Not used
" z  P6 T! N. _6 p    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ p) u; E8 h9 c' n    mcasp->regs->AMUTE      = 0x00000000; // Not used1 ?9 X, K3 R2 t, o; X+ A4 |
: F4 d9 V+ ~6 T$ H) d" |
/* Starting sections of the McASP*/5 X1 o9 p$ ?' D( c0 G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# Y/ N: k4 ?: C- ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 {. C, n/ Y* M& K) Z& O4 Z( X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 e4 ]2 |8 R6 L4 y: L% Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" O$ l/ x( F1 a. T4 a
) q, `3 ]% W, S* W" ?# K/ a* q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; y! n; z5 O; D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: P& {* T; o3 u' S. h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 g& O. {% L; S$ T7 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 O( k/ G9 e0 a, X* V$ W8 n

2 v2 u7 \$ `. |- I9 K    mcasp->regs->XSTAT = 0x0000ffff;
5 g, c5 M* m/ Q. ^    mcasp->regs->RSTAT = 0x0000ffff;
& `  P& T0 H/ _$ c) B7 v) Y: R1 o. a! F% k3 J& V8 _" f* j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ O) o" S7 J0 Z" e. _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 ]3 q, l* \4 J# E9 N
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 g8 @8 q# U4 N; }8 ]' p8 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, N$ X1 O1 x$ C9 G& |6 K
$ V$ T# k0 F% D# ^0 p* Z) Q    /* Write a 0, so that no underrun occurs after releasing the state machine */: W! ]9 ]6 J. T" n$ M" I) J
    mcasp->regs->XBUF5 = 0;
% {2 n, [' m" {- K% ~0 }# O) V    mcasp->regs->RBUF0 = 0;
/ B* J. o8 e- D, w$ k5 Y
) W) `8 o7 R( N: x( Q2 F2 ]- `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# r9 E4 a) W$ p5 ^* u$ h" N  k8 G; O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 T4 b- z; K2 A9 T* i* T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 Y) [$ s6 V0 n" X- S# g9 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( V5 Z$ u- c' z; f1 ]4 O2 V6 u1 _! U7 p: j6 t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & ?" i, q( Q! m  x/ O9 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! m: I0 Q3 [9 H4 D2 w* n    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# d; e& ~2 A: S6 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' a+ n+ ^8 z, e' D' a+ ~* [& F/ H6 o: _, `# U0 o$ c. k
    CSR = 0x0000;
- V8 C$ [& O2 w# i. @1 O* X    INTC_INTMUX1 = 0x3d;9 T# F/ \. h& Q6 \  Z( ^
    ISTP = (unsigned int)vectors;( b& A7 D! a% k) X
    ICR = 0xFFF0;  
- U# N! ]1 w7 H$ h    IER |= 0x12;  
) X: V: m! u8 a# c( q0 p/ a- e    CSR |= 0x01;  
2 E, g. o4 A* ~& i. o$ Y  ]: a! h" T* }
0 g: O$ G1 O" y7 j, Y, J; H4 k1 L% s# M

  j- f0 @: W. Y7 F( h; P  g还有就是两个输入输出函数:
2 t' E& x( Y6 a' N9 z- w- I: z) B5 wvoid output_sample(Int32 out_data)
; q8 ~+ d( X& A{
5 Y- W9 a7 S& z0 A  AIC31_data.uint = out_data;  
3 R( z" L6 S& Y: m" c  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( U* R8 r' e. v+ t  u" ]}
" y1 o' ~4 G& D3 K4 B& V6 c% u. C$ d2 K* ?$ }5 `
Int32 input_sample(void)  P. Q4 Q2 M  O! A* C. m% s
{  
. _7 Q/ A* B: c0 H5 X  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ |  w- p+ f- y2 @4 d1 `  return (AIC31_data.uint);/ o% k: F  ]2 f/ B( W" f* r  P6 o* ?1 I
}9 `$ S7 p0 P% _/ \' A

- L1 v3 K7 Y7 \# [4 }
分享到:  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-2 13:16 , Processed in 0.041835 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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