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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, i: T0 ~8 |" u: G5 Q  L
main文件:
, E- X- X( f6 Z" P4 |interrupt void interrupt4(void)  + K5 V' V, B" j$ G$ f% \
{( s+ R+ @3 z! W; m$ M7 K7 D
  Uint32 sample;; q; A- D1 `4 F* N& W
8 o( u0 ]% K% C2 @+ R! m0 v
  sample = input_sample(); // read L + R samples from ADC
3 @! [% a+ i# C  i) k8 Y  output_sample(sample);   // write L + R samples to DAC 0 `5 @7 H4 |; f, S. A
  return;' J3 n+ p) L+ ?! T. e  a% q# j
}
2 U1 _$ y6 ]% U9 S' q
% Z9 o' _0 g; x5 w  Eint main( void )# F7 ]+ l7 o0 u4 T
{
0 U7 |; f/ Q8 l8 H) L! |7 R& j) {1 {+ C$ q6 w1 {
    /* Initialize BSL */
6 m; K" l$ U* b+ h" @  O" _    EVMC6747_init( );
6 }. G* T7 N; \" r- |- h        /* Call evmc6747_intr function */
! v- e3 I( E: k8 }0 Z0 i! s    aic3106_init( );6 r2 C, m& z( b/ q( P
        while(1);
! i8 U& L! a2 ]7 |: o% X5 s}
' e/ t& I* i# d3 U. D$ q4 r
% \( i. [3 j9 V6 u! @' i* G  i. u* B$ R0 L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) n* f3 W* ?% N8 @5 X$ W
/* Initialize MCASP1 */
/ t7 K/ a( n8 s    mcasp = &MCASP_MODULE_1;
2 ~6 Q$ V/ K) J; [! v# M2 O    mcasp->regs->GBLCTL  = 0;       // Reset
! V4 Y& n$ i8 B, M: f    mcasp->regs->RGBLCTL = 0;       // Reset RX, o9 _0 t7 @# V  K1 \9 L! H
    mcasp->regs->XGBLCTL = 0;       // Reset TX6 i* R$ d0 M7 Q/ H7 H$ c7 a6 N
    mcasp->regs->PWRDEMU = 1;       // Free-running
0 U4 o* W. }' m3 k   // configure McASP0 receive registers
9 A$ q% M6 [( Z+ S  e/ X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 O* G/ H/ ^3 X  U0 s" p$ D  o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 u( i4 i7 H0 u/ }* ~. p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- b4 l& l3 H" q& C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) M" y+ X' Q( ^, J# W( a  L1 k2 s    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% l2 S& R: t0 z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 ^; E0 I) C  [/ `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; ^, o6 E: @3 ?# y; q5 g5 T3 r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 u7 F0 E  W: ]* y: f7 }& I( W

; t. G# p$ y5 D1 B0 C8 r: J    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 }. L% Z0 O; {% \! I# j! f( J. D- J0 _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# \  l5 F# }0 @, L% ^# B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 W! _# P! `; ^- F, ~( U% e7 c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' p( h0 ^4 v7 [6 Y, G
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' M! P% B8 X+ T9 B; a/ o5 Z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* [/ Q6 o, F! y1 E  `% N/ w3 @2 O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. \% M  {( k8 }& s- R0 l3 `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( G! x. Y3 o& R4 B1 g
) _8 a. ^4 [1 A$ Z! M0 V
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 Y. S+ R1 @; W4 i3 |* [. o- ^! y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' P" H0 n8 D# w7 Y) x. _/ ~$ H
    mcasp->regs->PFUNC      = 0;          // All MCASPs% h8 ^4 w/ }* I- w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" i; R7 V( }3 @& m

: H0 F& }! V' s6 n# [    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 F$ j6 b: j( a    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 w  ]6 O' j, e/ y    mcasp->regs->AMUTE      = 0x00000000; // Not used0 d$ j1 L2 k% b2 g; |7 ?* ^( j
# }; W* f" |( a. j* i
/* Starting sections of the McASP*/1 F2 A# o: U  B, ]( U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& M9 U) b% }; I" Y" P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# b+ ^2 v$ A3 _/ _9 G, M    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! w' {( S) v7 T3 K  x" D9 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 E) M. m; O5 ^" t; u

& |- k) J. G" N- U: d    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % l9 U# g- u; \! l4 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' b: }  i* ?6 E2 e
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ B- `2 [7 _8 ^9 V" j) M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# i* N% F4 r' D2 k
) f* [  e! S; Z6 Z% J" y3 Z
    mcasp->regs->XSTAT = 0x0000ffff;
, s+ P0 v7 o' u6 A0 x: G+ `    mcasp->regs->RSTAT = 0x0000ffff; ! p$ w: @( Q' b/ ~! }3 S3 ^* V

' l$ d2 @' _6 T; p6 m- H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 v4 ^. O: _+ ?, c' ~0 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; F( |$ @& Z. u, R: |0 E    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& D" d) t# u5 K: W6 I/ n# v2 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, K3 x8 S; f+ R  {
5 n( |9 J( c8 V4 m( I! D1 H
    /* Write a 0, so that no underrun occurs after releasing the state machine */) U9 l# T& p- v% Z  P$ T7 M0 ~
    mcasp->regs->XBUF5 = 0;
5 U, m& q* h) W0 q+ _! Y    mcasp->regs->RBUF0 = 0;, c( y5 s; k' x; f, M7 a
& H- y* H2 U9 f1 N3 x# H9 F! n0 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 Q8 N2 q  X* x. y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; N, e0 k9 B- S    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: _/ e' a0 A6 h8 f; I, w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; K8 f% L" Z3 `$ R
5 m& n! t) s* S- ?* Y$ T8 Z4 n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! B( E) u% F' \7 L4 Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. K- O' [) j& E! V) m) ^+ S7 s
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " T+ A$ I' m7 c: Y/ d  d0 _% A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  v, n* u9 ~( d$ m+ V
' P' [1 U- J5 V% U    CSR = 0x0000;
6 |8 `3 D, T; c2 z8 T    INTC_INTMUX1 = 0x3d;
5 l. J$ N0 J5 L. b) V0 b    ISTP = (unsigned int)vectors;2 C  o1 \* c/ e% }) g5 x
    ICR = 0xFFF0;  
2 P# `( S9 B; j) x0 s    IER |= 0x12;  . b  M% c! x8 t- i+ I: f
    CSR |= 0x01;  
9 J# G$ ~8 b9 y" _  K3 \; y) E" W! d% B8 g2 k
" i: N3 [4 h$ [6 h
8 R6 U; z+ h1 |& ^' D5 B: {
还有就是两个输入输出函数:
" H- Z6 L& m. H4 Gvoid output_sample(Int32 out_data), C' D$ R5 X3 I  ~
{; b0 V1 c- d; w' S& U
  AIC31_data.uint = out_data;  ! m  L6 w+ C$ f2 v# p' g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;) {3 M: n( L; E2 [& z
}
8 v+ u+ p2 x0 w4 s2 E1 _
7 w+ `: l# ~. vInt32 input_sample(void)5 K9 K; U6 x  J6 n
{  
! z; K; J0 N; @* c2 h. q  AIC31_data.uint = MCASP1_RBUF0_32BIT;. o# B& e6 A0 \( M1 F* T9 W1 q
  return (AIC31_data.uint);: Z/ K' g/ [; ]0 @- i' M
}) K7 f, c% k& v2 E$ a

2 ?4 o8 i) p' H. a/ p5 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-23 10:08 , Processed in 0.041153 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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