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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* ]2 ~' _8 N. g+ t7 a9 Q! {main文件:
3 T. ?' m8 K8 T  k4 y0 F* hinterrupt void interrupt4(void)  
' m' o  c' j9 q: X{2 h2 r' l) M4 |+ L& L0 A0 ~
  Uint32 sample;, L' ^6 K, |; g  {

5 C7 E8 x6 Q6 J( j; A( u. ^  sample = input_sample(); // read L + R samples from ADC
/ N3 w1 A4 ]0 D% t  output_sample(sample);   // write L + R samples to DAC 9 o& b# H' F8 e, [
  return;" h: `1 n5 |- T& w. y
}
' Z: ?! s- ]. T8 ?, W
5 O: i0 K& {! g( k# f9 Yint main( void ); F" j6 Z" [% i$ w" w
{% T" i4 R6 n9 T( v: H3 g& d5 d

/ x8 W* ?: a3 m+ j- L( b) w    /* Initialize BSL */
$ Z  @" N: A+ e0 @/ ?    EVMC6747_init( );! ], }% _- i# W* j7 i: u* Q
        /* Call evmc6747_intr function */( J5 n4 t* i( x$ x. r. d7 }
    aic3106_init( );, C, w3 s  h( K$ k" p
        while(1);- m$ b& d5 ?# g6 j+ k& t2 ~
}
! ^% t. Z! @" |
$ V2 f% j/ ?6 b' G' M2 A: L3 b- z& F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 R+ O6 W) t9 C+ e
/* Initialize MCASP1 */
% ?9 q5 z' {, ~/ ~0 x; l% f    mcasp = &MCASP_MODULE_1;' l6 X" Q" [4 _1 f/ p/ i+ r6 W2 o+ V
    mcasp->regs->GBLCTL  = 0;       // Reset5 M+ Q0 n, `* g8 z' m! G- v
    mcasp->regs->RGBLCTL = 0;       // Reset RX" u! r$ F3 K4 C9 H, C6 s& G
    mcasp->regs->XGBLCTL = 0;       // Reset TX: [6 o+ \9 P4 \4 b2 V4 w# R
    mcasp->regs->PWRDEMU = 1;       // Free-running7 N. h$ t% \9 l, V' l5 c* G
   // configure McASP0 receive registers
( `) Q- l/ ~; Z6 [; W5 t1 V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ ]* V, k8 M1 F" l* g    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# y, \1 o3 X9 J% A) u: @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: S5 D) Q3 f5 {2 u$ y( M# ]1 i5 P    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' H$ C2 h, V; s* o) q' E    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! ^! U" \& ^1 U; p    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% v+ O/ k* v0 g( Z1 \: V4 t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: y* U! Q6 F/ p' E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ T* p- n6 D3 }+ r+ f: e3 v! X% u5 P  w2 p5 F& m# J& b
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ k( D; i8 U; x& z. y
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" ~/ @- A7 B0 |* J8 J* ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& U, F5 {& d. E: B1 K1 `* L& T
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 @6 x! W1 \- m& }& Y1 u& Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 i& a3 q0 T8 J, c1 C    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, I0 U9 }1 [" b# m
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 V) a. R& N$ e' c: ?1 S    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, m9 L7 l) K0 C7 b( i1 {7 X2 j( S2 C+ J5 N  n! o
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: _" q3 `8 k$ `3 Z- w    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' w7 w+ P; @- N" |  S4 O( P+ ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs- k& I; L' o% l8 i
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! @* P, _& N4 s9 i/ Q: z' c- J1 j$ r
- {1 |0 B& }% @7 G+ I
    mcasp->regs->DITCTL     = 0x00000000; // Not used( h' n% s4 @  s" T
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 n8 G) E) d  ^* z% l  A/ j5 ~6 U    mcasp->regs->AMUTE      = 0x00000000; // Not used8 M% n; o" P, K( h# J' x$ ]. ]

* j) Y5 S; r2 i" E( @; F. X, I/* Starting sections of the McASP*/
  r. U/ i2 _1 m# U    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& H* `% V% [" z/ {, e0 i2 M8 y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + z! t5 _1 C0 [& I$ f
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / A6 m% y) K, d0 G: @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! o0 r! f  w, R* I  I. }* u& Q8 f

  ?  ^! s: N: x! G) D    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 i- N6 o0 H; {2 M; f4 K) L% m' v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 E& Q  e% {0 {2 k6 B
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 J' s- n+ P( z2 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 H" R: g' P+ u( c3 `2 M
  _! `3 q( Q8 @; R; {
    mcasp->regs->XSTAT = 0x0000ffff; 5 f9 Q6 [8 w! g$ ~
    mcasp->regs->RSTAT = 0x0000ffff; 2 z; R; r& p0 W' b- r3 X2 i( V$ n9 v

5 L! B' B5 Z* f& g6 A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; C  R5 P4 `9 I% W& O. r. K( F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: \, M0 }+ |+ P: u
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! |& N$ w! j* e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, C4 i; ^5 f$ |

: }: H5 q; y" b3 F& v& ]& W3 f    /* Write a 0, so that no underrun occurs after releasing the state machine */! [* @+ [' R9 \7 {, F! q4 P4 n7 v0 `
    mcasp->regs->XBUF5 = 0;1 E; k: C' |& \# n1 \
    mcasp->regs->RBUF0 = 0;- W, `, E" `  \6 ~4 D

+ c: p6 Z2 z+ Y# }' O0 E- A% V1 m5 P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  G: U' @& H$ O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" e) |: \, a2 M4 k7 E0 S7 E    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; L' Y9 [0 c1 `# m: n( j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 j2 m+ _7 |6 Q- ]( m2 A
9 Q, j: D% C+ l    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % k: ^+ E  z2 z4 h- F0 o$ e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% Y( ]( k7 i3 c! a5 {4 j2 l    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ E  d3 H! y: G2 a2 t: F9 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ m8 P& _- Z% M- [- p6 [" D

' C- g! O$ x. y# H; n' g    CSR = 0x0000;1 V& g- |+ Y7 O2 C. P
    INTC_INTMUX1 = 0x3d;5 X8 Q* A, p2 M' E, r6 D
    ISTP = (unsigned int)vectors;
/ X! l$ C9 _! t: S# a5 a2 V    ICR = 0xFFF0;  
$ v) D8 x3 b! P) [/ ^6 J    IER |= 0x12;  ' V2 j! V: v6 d2 c; Z# d
    CSR |= 0x01;  
& S- M8 u5 u8 h: h% n3 z
  a: N# j0 A; E2 h, E; K0 s# r2 S1 l! _9 J6 |% r$ u

0 ~  A8 j' z$ L& k3 G还有就是两个输入输出函数:7 Z' N0 l7 I! w$ z1 r+ O
void output_sample(Int32 out_data)
& k0 R8 B' q7 D2 A( L$ Q9 i{
: ^3 i! m9 c. K  AIC31_data.uint = out_data;  
  n- k( f  E) e( r% J  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 [% y6 K: {! ^3 y}& g& t) N+ q1 _8 t5 A& ?
8 |+ K' W- c9 y% k2 P- M% Q
Int32 input_sample(void)
0 e' v" R% A8 R6 ~{  ; |6 T1 ?0 C4 p% C$ |: [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 \2 J5 h, F2 B+ ]
  return (AIC31_data.uint);* y  ^: H! s$ c' R! Z$ b
}+ `, t& }4 b  t1 t) |) Z8 W& a( A
4 J0 [& N3 ~2 {$ N5 B: K( G5 \
分享到:  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-5 14:38 , Processed in 0.039112 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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