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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" Q+ `5 P' A7 i0 s5 imain文件:
+ g9 P, {# p- X1 n' Sinterrupt void interrupt4(void)  6 {7 U5 |; @" M& `% r8 }) k
{
' H& v4 G9 P+ [1 v, [  Uint32 sample;5 u. F3 [0 @' K+ h$ X

3 ?. [" Y$ U7 B. O  sample = input_sample(); // read L + R samples from ADC
& K( p8 G7 V) \% R7 {6 D  output_sample(sample);   // write L + R samples to DAC 1 i1 l5 T6 [' h; N$ _3 B6 G5 a
  return;
; ?: l  _8 E, Q}7 m# v; Q4 B- M  L. d! Z* h

4 w' P/ F$ b: x9 b+ A- d, ?int main( void ); x& `/ ^; W0 F" g2 m* @0 E# o
{
3 `8 q. u% q: @- s+ i6 U
- d( T% K! X! v1 I    /* Initialize BSL */
1 ~' W$ N) l$ P    EVMC6747_init( );8 G% A* I3 k8 j7 |5 H% k
        /* Call evmc6747_intr function */
7 l& m) f" T' `& G* q    aic3106_init( );) h; V- Y+ {2 K. M, S7 E5 ]& A. m" \2 d
        while(1);9 U! S- R# B8 q) A; H- |
}! p. [& B* V; U0 T; p
( M" y  ~- I, l6 |9 ?- p& v  b4 W; A

( s$ s* c& T: ]1 Uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& _& [3 {* l" ~
/* Initialize MCASP1 */
# r' E$ g+ r, a, k8 \    mcasp = &MCASP_MODULE_1;
- d/ P  C' o' t; G( K& K    mcasp->regs->GBLCTL  = 0;       // Reset
! K3 g4 r/ v, Q+ T    mcasp->regs->RGBLCTL = 0;       // Reset RX
( ^& d+ D- C2 k5 h! \6 H) I    mcasp->regs->XGBLCTL = 0;       // Reset TX
4 m( `  J1 ]: s9 s) T' _/ W- z- Q  N    mcasp->regs->PWRDEMU = 1;       // Free-running% E% Q- L# ?+ ]) V
   // configure McASP0 receive registers
$ W9 [7 B6 `/ T, E! b7 ^' N    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 H4 X+ O- i% p5 x    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; R9 P% E) }3 P- r    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 D* C/ x& P9 j, C) ?: I
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 x' D( o; w% Y. [2 z; J) k
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! P7 T" F: o5 Y" d6 X7 [' G$ R    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ S  M2 j; C2 a% e+ T- v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 E9 O. y+ \# Z' M    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- C4 z* i9 Z/ d; F0 J5 c+ F, a
+ y6 C* ~) t8 c    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 C$ \1 D5 c7 t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; I, v' T7 h" X! p    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; L; B7 \9 o6 L% Y4 z( `9 G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 y& \& \! I% E4 x% P$ t. P0 l) R+ `    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 Q2 l: P8 m+ `5 A    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# r0 K# N" L# z; @    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; _/ U/ Y- [: z/ ^# A    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 I' ]" b  K) r5 @4 v
7 L( I2 t, D3 g6 c! `  e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, d; M. b( ?/ p- d+ Q: b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 e8 Y' y, |& P' ^+ u    mcasp->regs->PFUNC      = 0;          // All MCASPs
  T" E8 Q; k8 T  R* j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ {# }3 V" z+ Y! D9 }9 g; S
& q* ?' y6 P& \
    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 h1 M5 i) }3 D; c) X9 L( |    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 ?/ Z# p6 W' \2 ~" n/ f9 V) {0 }9 e
    mcasp->regs->AMUTE      = 0x00000000; // Not used/ R# n" N8 d9 ~

  |1 ]3 |- e0 Y. _/* Starting sections of the McASP*/2 `) s/ G2 L% V  N/ o6 d8 h. C
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + ], x0 \4 Z: M9 |- d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* W1 X& O) c. s" d. P: H5 f2 j& h    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ R% U8 s- v+ O# R% \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& O4 C, V. ]# @
6 L, m  E) e  t
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- G; r5 k- t, D( u) X0 E( \3 ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ D& ^7 j( R7 |- l  A% I( x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 ~! Z+ ]+ s0 K& @: L& m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 Q+ c3 R& r3 ]" @/ E8 v. k/ C" R4 _
    mcasp->regs->XSTAT = 0x0000ffff; 0 G) ]0 W' f* ~" c& R7 M- T# Y6 o
    mcasp->regs->RSTAT = 0x0000ffff;
1 I" F7 G3 w9 l9 R6 {9 x- x7 f% r! t' C+ c( [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 h$ E1 H3 g6 e8 V: s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 D; x! a: p- [( F- J) e    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# M% B' M" x1 |6 E* K1 s  v/ J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 E1 f! s; `. {4 P$ d/ i3 {# Z' t! ~/ p" U+ E0 }8 u7 M
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 y/ U1 O, z4 ?; `/ J
    mcasp->regs->XBUF5 = 0;
# B+ h0 k/ d9 d& ]    mcasp->regs->RBUF0 = 0;
1 M+ }5 R; ]$ P1 W. g( T6 F1 T; c& S1 r; L+ _) `! {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + `. ]% \) `7 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) K4 t) M0 I5 f/ v) t    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ i) {# N! s( G3 I6 H/ Q3 ?/ @# L7 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 m5 u, H0 p, C0 g$ I" z8 w4 Z% g! t- F5 k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' ]' Z% d. O( s& H7 ?# P( N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 I2 }/ m# Z; F. h4 g: ?9 s' Y% i8 w    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* g7 `0 J+ P/ g: i+ i+ n$ |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% e2 C' }2 t5 L

* [% q) r. S0 h5 v    CSR = 0x0000;. A! \5 ^: M) k: k
    INTC_INTMUX1 = 0x3d;
, ~& `$ {2 Z/ ^+ Q6 E    ISTP = (unsigned int)vectors;. l% z" n# ]1 M- }1 x& V
    ICR = 0xFFF0;  . u( h0 C6 T$ p
    IER |= 0x12;  
# j  l% W! m, d    CSR |= 0x01;  
5 g- y0 ?+ n) {: p* D  i, W8 w3 Q* i- s; n

  i: Z2 Z* m, ^+ {. p6 \1 G; {% v: i! t6 y7 U. P! R
还有就是两个输入输出函数:
- F9 W/ F* u7 J* H3 i( i+ h2 S$ gvoid output_sample(Int32 out_data)% G1 i$ b, Q1 T5 o) Y/ X
{) s& i! B' H2 r! A0 F" m3 G
  AIC31_data.uint = out_data;  + ~# m; \' a0 F( U2 x* l. c, L
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# _( ~/ d, y8 X: Y$ R& ~. Y6 v
}
: S5 k0 B2 Y  R! U7 O  Y6 D/ N1 H# Y( i6 h
Int32 input_sample(void)
/ k8 i. ]' D! |& f6 H{  
* v8 S' A6 L. z7 M1 {  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 X% _! P1 {  ]% g$ I  return (AIC31_data.uint);
6 Y: S6 P* y6 u$ w; }5 w}2 g& r+ n2 n1 _! [) K( O9 T1 o, y( L
) V7 r8 ^& X. c8 {
分享到:  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-28 22:16 , Processed in 0.046468 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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