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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ g1 r$ Q+ |. x6 pmain文件:* y" ?+ @6 T7 Z# o9 w) F3 g6 a
interrupt void interrupt4(void)  & |6 j* s# ~! o' L
{* J5 X  v* J& s, f
  Uint32 sample;- C& K. v) Z8 Q) E3 E

9 t; a$ `+ I8 ]) r2 j  sample = input_sample(); // read L + R samples from ADC% E& O( @& W/ ^; Y# E. y: j* o  G
  output_sample(sample);   // write L + R samples to DAC ) e' L- R# Y# O: \, x2 b9 E; `
  return;
6 ^" ?9 ^$ U" {, t$ r/ C; L}
; ?3 u4 W, J7 s* E* {6 b
- `0 }8 S1 r9 U; o6 n! N1 {0 _int main( void )
. X  f9 A& W( a) x  F{0 K# z! y- V  S- u
7 W; y& L5 K! P8 l; Y  W
    /* Initialize BSL */
+ C/ w3 S% s6 J  `0 f    EVMC6747_init( );5 q$ s. R: {" u4 y/ y
        /* Call evmc6747_intr function */, n+ O' J& F( @! e
    aic3106_init( );& D& |9 ~& C" u$ a  @
        while(1);: O& x. x" a! z) Y1 ?, J4 c
}5 V" ~$ o& K& `) d

; ~1 Z; L& i, \: C8 B7 M2 _' [( X4 Z  p1 @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 D% L- D" G. ~5 T: n/* Initialize MCASP1 */5 e" P. B# E# e7 {& i; y
    mcasp = &MCASP_MODULE_1;- x2 ?* t# f, t8 [$ Z$ ]
    mcasp->regs->GBLCTL  = 0;       // Reset( d/ N  e. k" y) c
    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 G; D) @8 F8 ]7 q" @. x2 T+ J    mcasp->regs->XGBLCTL = 0;       // Reset TX
. B/ {# F4 O! O5 t" J    mcasp->regs->PWRDEMU = 1;       // Free-running
8 w) q  O1 J3 i$ T% t; W   // configure McASP0 receive registers
8 c2 N4 }. X4 N* K$ t; k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 b0 W3 h1 ?( f& F% \9 q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( }# F/ i' J% M0 v3 Q0 w    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 k: f4 }5 W( O; k+ g/ B3 V
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 r. X" @  T, v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 g  e; H) U5 K& j5 X* A2 [( n    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 s! @4 [9 G& d2 G/ g  C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- Z7 u3 g9 P, z0 @7 |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 H& W/ ~1 g! o) c( i8 z/ g
  B7 F  g* B3 o    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. m( J9 M# Y5 s6 [3 c5 \  X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ }% W+ C& l' ?7 F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 e7 |3 l  ^4 n9 I9 F: E
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ I9 N1 V! W0 I! x% I( x" Z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. o; v  w: Y' e6 S8 t3 C
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 q8 T. N: B& S; A1 [    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( T1 T8 j0 x) ?5 a
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 O7 I5 {) R3 V" g3 K! }
, j; n+ E7 ], `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 ~) `7 S1 U5 C: K" @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 E7 O* ~$ \2 e; Z4 G    mcasp->regs->PFUNC      = 0;          // All MCASPs# q. y, ]- s8 B
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 o. A: [2 @8 E  h. P! V
$ K8 [1 J- n- `3 t+ E/ h3 S    mcasp->regs->DITCTL     = 0x00000000; // Not used2 |$ R/ E9 r2 V1 g3 q- Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 R  s9 L* w" a. E/ ^% e/ s! i    mcasp->regs->AMUTE      = 0x00000000; // Not used% D! i; x) l, P, S, v7 L7 A4 p

9 V3 A, s6 l% |/* Starting sections of the McASP*/, @/ c. h5 Q0 c' K0 j% ]" V5 z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : F7 Q7 y& l/ ^  i) V/ B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ j3 w3 W# w! e2 y3 T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # w9 U8 R' Y/ i8 X: t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  y* ?* }& n  _% O* X; s' @, n
6 W& g9 l) c7 }0 \3 ?4 F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! m( k. T) C* Q# r3 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" Q: A0 f& R* u  X& o8 {; M9 x    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" }' D1 b. i5 @7 i3 b. w$ Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 |& {" R6 R: f

& A" t+ ~0 c% u/ r% I! [7 U/ u( k    mcasp->regs->XSTAT = 0x0000ffff; 8 W$ ~- _- g* U6 v: y
    mcasp->regs->RSTAT = 0x0000ffff; 0 m0 R8 |1 h3 W  O  i: L0 b. b

8 x4 ?6 M) N* m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 G5 Y- u( V7 w3 f/ P# n2 Y, ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 A7 e. z& @) g8 x5 w# |    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ _9 P3 l, J6 g) T4 f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ v; f" _1 ]6 h- N3 g1 T5 k) e3 l& w$ e+ x4 }7 a4 D7 R  d
    /* Write a 0, so that no underrun occurs after releasing the state machine */( P" F) _, u3 P3 L0 e  N
    mcasp->regs->XBUF5 = 0;& T6 l6 J' x; V4 O# N! {
    mcasp->regs->RBUF0 = 0;
4 d4 V# [3 ?7 f) v7 _3 d1 ^* o- p
, K$ t/ H) }; E% S/ s. ?    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& ^# `* {5 A& B; }, y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. B+ U- O+ w( W, n
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* X6 T  T2 }* ^$ _/ P2 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& [% M. E8 B0 }  k9 R

0 b( I1 X4 Q8 f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : M: c$ d0 Z( v6 [% X$ A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  e" S7 K' Z" x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   ~) t! B. _" b/ E0 \) ?4 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" `; V7 O# H% E' {& t9 A
% C4 D: a( i' a$ L
    CSR = 0x0000;
& o; Q  g5 E& A    INTC_INTMUX1 = 0x3d;  P) \7 n6 z& Q8 q
    ISTP = (unsigned int)vectors;
7 q+ T$ _% E6 _- ~    ICR = 0xFFF0;  
. ^/ J3 C5 ?2 V4 a3 N    IER |= 0x12;  
; l; I# Z7 x7 t    CSR |= 0x01;  
3 F0 ]  s' Q) l% c; _( ^( x# S
8 T# `" w4 p. V. X; |! i. G/ {9 z9 e0 Z

8 m, ^  e! b; l% ?* O还有就是两个输入输出函数:
* {2 v3 R: K, c. Z; V3 d" d" ~void output_sample(Int32 out_data). [* L4 ?: S9 M- D% r6 Y8 D
{. d3 q( B/ W  T8 ^! }' e
  AIC31_data.uint = out_data;  % u" [# U4 b6 Q
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 a/ J) F1 {$ k8 ~: o0 M, y}6 [7 E4 T; M; @

" w. y+ R9 }# d# LInt32 input_sample(void)
- _& H6 |. e/ g% q& f{  
5 c5 O- [9 e' T7 {- e6 `2 P  AIC31_data.uint = MCASP1_RBUF0_32BIT;; F* @- H* R% g; O! i  x) K
  return (AIC31_data.uint);
( r5 S# \7 `  Q* z5 [  V. e}9 G9 [6 S% y4 x& z& H8 M# k

( @: l( L) `" ]& t
分享到:  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-26 05:12 , Processed in 0.054178 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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