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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 {& M. Y8 ^8 t* B% w7 d- k+ }. C& |
main文件:
( H% L, `5 N5 N* W# W" R9 iinterrupt void interrupt4(void)  
2 \. Y: z3 Q( f( U0 w, I8 ^{. p% z9 U) v/ }2 H% n8 w! O( O
  Uint32 sample;
5 @+ q9 ~' c/ V. i5 ]6 W3 U8 U) N4 [
  sample = input_sample(); // read L + R samples from ADC
6 ]) M- M2 W, A$ h2 N* A8 q  output_sample(sample);   // write L + R samples to DAC
/ L6 G% }( A/ Q% }) @8 j1 T  return;/ H) V+ i. G2 V4 |1 z  g- R
}; _- H3 P6 o) u! I7 s; |) {
: v  N. ]8 u$ g) K! c. _, g
int main( void )5 E+ f" }* O3 l7 W3 S) Q2 I
{
3 \9 C/ d% z2 Q2 x9 N: v* a
9 I5 [1 r, B* B' k    /* Initialize BSL */
7 z$ x, B; C, ]! y    EVMC6747_init( );
: g- a  c+ L8 T        /* Call evmc6747_intr function *// L+ D, j$ j5 e: S6 x
    aic3106_init( );
0 Y# p0 j+ E3 C, o! m2 J9 o        while(1);; @$ I* K1 H5 C, \6 u$ v
}. M+ n2 t: O; x

+ [; \, I4 c! L1 p" ~" T  @! @
0 v$ e! F# d5 V$ Q! }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 Q, K2 {0 o7 Q) B1 s/* Initialize MCASP1 */
% J2 U6 J  S3 I0 m2 b5 |5 Y0 r3 B    mcasp = &MCASP_MODULE_1;
% H* C6 M3 N" s, j    mcasp->regs->GBLCTL  = 0;       // Reset
' `8 C9 Y( i' Y8 }8 x" @$ [8 a, f+ i    mcasp->regs->RGBLCTL = 0;       // Reset RX
' P$ z1 r: v8 _* k; \: e' O2 t" P    mcasp->regs->XGBLCTL = 0;       // Reset TX! ~) V4 M! i$ u' G* d$ S
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 p3 ]' I( w* Y  V$ G   // configure McASP0 receive registers  B' S$ P) l. p# V
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 A5 C9 H  V8 n  j    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( [& y1 P$ }6 t+ z1 ^' L$ o+ G, z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; x8 P8 a- B4 w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 l  {4 Q8 U$ T1 O
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& D$ f2 s* B: A/ l& V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 R) [) I* A) P3 @* v    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 W: u" a  V$ a& U4 j7 S& k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 G0 q4 o; |$ k

2 ^) w  Y4 t! n    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 r, [7 C: B6 S' ^; ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ ]7 e! Z; P1 L3 M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. c6 a9 N. B4 r0 z, S
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) X. {: m# P% q+ A
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' c% E! D4 R2 j( C0 V  N3 F    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) |  n0 Z4 ~- ]( R7 i: X) k: s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 }, [! B% ^: h) i5 n* Q  {
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. k/ U8 \1 v$ [$ E

- b) B" D- L0 g3 O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. C& g/ t0 F! O3 H1 N    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; p' z2 o9 `7 _- S
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# s0 j* Y1 U0 l8 b6 W- ?+ g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  i0 ]) m% u' g2 X; h& w( @* S
7 f: t- ?6 T% Z" S% t$ {: T$ q# o
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 ?& Y( X* U% v. m) ], U. ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ t4 {% K4 p- {1 X3 r* b
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ v2 U' k* Q6 h9 M8 }+ Q
% {, [) g& J# u5 _) }8 l7 B, v/* Starting sections of the McASP*/
! u2 n% F. p% f! ^: |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + v: L9 H7 Q3 H4 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 f) H) r  h* L/ U3 u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 ^$ ]) x6 H6 n* U# J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% [0 o$ @, F# `: m! K  q/ N0 S5 t0 c' C' }
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 U+ o$ ~6 ~: o8 ?  p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( l/ `0 Y7 e! _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ t2 s& U0 ]" d. j% e+ Z) y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: \2 `$ H+ W: ?7 \4 @- ~( P3 C& {
6 T( B4 X& p7 f% E/ n6 W    mcasp->regs->XSTAT = 0x0000ffff;
' H1 F/ B' R6 M6 ^7 Y0 ]) u/ u! u6 T    mcasp->regs->RSTAT = 0x0000ffff; ' j- n3 a" s, |7 u+ N6 d
, h6 {7 p, x5 d/ W% ]; e
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 }( B4 w. d% l& d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. X8 f4 Y7 M7 ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( X/ P  Q- G3 c# K. M2 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# u+ K; R- h( E9 [2 b* g6 ^
$ @$ g6 Y( f" O: a3 U0 [, ?# X    /* Write a 0, so that no underrun occurs after releasing the state machine */0 \  L/ d0 {; ^* T5 \' J: w
    mcasp->regs->XBUF5 = 0;6 ~: f5 `  n9 F, x' v
    mcasp->regs->RBUF0 = 0;' k. H! b$ k/ r5 y6 [
/ o& R, |/ i3 f& W4 m
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 A9 g9 X% s( `* P. P  }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* X3 v3 M' D: H7 p2 V, X( D/ L6 i! N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 _6 K) s4 j7 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. j4 L; ?' i: W2 S; T( x' H9 w
! j; D  _" X" y/ _# D/ m1 q% M
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # G( D" m- _/ R1 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 U! z. c; H' Y; e( W* a( j* k    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # W+ F1 d8 d- f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) i' b& u0 _7 Z* m& L0 `( Z6 i3 h- |% H. x# u- ]2 `+ H
    CSR = 0x0000;
; k$ K! `) Q, j' `9 m! D6 `# |# @! z    INTC_INTMUX1 = 0x3d;
4 e' E+ @0 }- e3 D+ Y6 [    ISTP = (unsigned int)vectors;
2 U, S- m6 b* q; ~5 q% H- j    ICR = 0xFFF0;  ; T9 C8 ^- i; y4 |
    IER |= 0x12;  
( ^3 P, u% p) U; l) y" Z    CSR |= 0x01;  
; y5 e: ?; H& w4 S+ H6 Z7 p& L
+ P0 ]& g# z& W: y  f
; A$ H8 Z2 e# Y/ u: Q1 m  J' B! [
还有就是两个输入输出函数:6 v0 ^( I/ B0 F* t1 g' M
void output_sample(Int32 out_data)6 y2 w/ i: q) R# F/ J6 T; Y; O
{
4 t: x2 ]' C6 X! Q0 e, H  AIC31_data.uint = out_data;  ( g/ r# J/ }2 h0 q1 _. g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ @8 x' l& u+ `  _3 z
}
1 H$ b) Q: [( L: x$ h8 D% F* W: q9 j" ~& W+ }: k( Y
Int32 input_sample(void)
) A; u9 D- e: ~1 D, g8 @; r{  
& C+ D: `. b1 _" g+ K: S  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 y9 l, J! J# W3 y0 t
  return (AIC31_data.uint);
; P0 n& L2 G6 Z}
* F% ]6 N% t8 P: s
4 [" _  k1 D) k
分享到:  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-17 01:45 , Processed in 0.042423 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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