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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( I# K1 R. f7 y( c& `; m: L
main文件:
' b6 O; i& c8 H% I" ^0 uinterrupt void interrupt4(void)  8 L% |! n* |! L+ A
{8 P% x6 M. P* {8 \- v2 D. c# q
  Uint32 sample;0 @$ ~% ~, i3 j( W2 T9 [

& K9 t5 i, ]( k: y  sample = input_sample(); // read L + R samples from ADC
/ `  f. X! u. a; Z& q  output_sample(sample);   // write L + R samples to DAC
6 j% m7 h4 }2 x. c% A  return;+ r; ?1 {  K' d
}' |9 f3 k1 P' K
' W. \9 ?, H. Y3 w2 {
int main( void )1 A7 R/ p; B' m4 ]# ]+ q
{
5 Y$ L1 I8 H* E7 _8 [( ^: a
" ?8 I7 @/ W0 p- G3 B    /* Initialize BSL */" A- ~. j. C# m2 D4 N, P
    EVMC6747_init( );0 |- f$ ~3 K4 p, V3 |3 e  Q: |
        /* Call evmc6747_intr function */6 h( O0 G5 ~8 J
    aic3106_init( );1 ?- H5 q, H* X6 ]7 K/ J6 F
        while(1);
' {1 [9 U5 M+ j2 S9 b}* B6 }9 W/ B' @4 b. _
# Y" o# S. e9 b

5 P& G6 H7 [; y- {" k6 q) ]7 caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 x! ~/ u, ]0 P: I/* Initialize MCASP1 *// _7 Z) t3 r3 q: W0 _; C
    mcasp = &MCASP_MODULE_1;7 r3 [' o; f; o( r" u* V
    mcasp->regs->GBLCTL  = 0;       // Reset: J3 @) K" l6 V. f% H
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 n  b8 H: m# E& R/ M1 n: c
    mcasp->regs->XGBLCTL = 0;       // Reset TX) {5 q7 `/ z6 ~* h8 q( N& V# ~4 c
    mcasp->regs->PWRDEMU = 1;       // Free-running+ h6 W- b# C/ r; V7 ?% V
   // configure McASP0 receive registers
8 P$ r& e3 U0 ]& S% d0 `    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; U" s( A5 L5 B' r& G$ z3 ^; M
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) h9 z) I6 p, S) D1 R/ ^' O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 V' I/ J2 H( v& E/ j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 z: \% }8 q' `: L& `    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' A) B4 _/ U$ @7 G" v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( N3 N) r4 G' \. E# o1 S    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ d" n) K' H! N    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) T5 V! X7 V7 P# \" e1 n: ~4 x
7 q7 H, I% ^, a- I: S- A+ b: L
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, }/ ?. B1 X, ]+ ^- q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; ^; N* D( i7 ]# q4 W2 u9 {    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 P5 G* ^6 ]% i+ a; o
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' n4 [: c: ^' r0 w2 u4 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! a" E: E# g) ?+ }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# u  Q  y- `: s/ ]9 h
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. c2 w9 p! @( h+ w
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, _+ P! v5 z  J: E$ ]0 q- E% S* f5 b- X) ^
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- p  O. h" D0 z/ l! V( r& h6 O
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, V/ g( G" ^3 C) r    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ c" g& Y8 B" B# S    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ z$ ?$ U" w% e, o! s# u, Z
, `  B* W) I! e, e& B0 ]
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 N4 |  y/ d- r2 ^  A    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) p% P4 S% ~/ o5 j8 c! }, I6 J, Y    mcasp->regs->AMUTE      = 0x00000000; // Not used; R* [8 k# r  U; a5 F- f7 X

7 f) c% u9 [* A/* Starting sections of the McASP*/
' w! n; @4 [2 L# x$ \) u8 x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 V4 {, x  Z/ p! z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ f. y) E# C$ N* t; K* @3 A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; P. n+ [0 Y/ y$ P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 O9 R; F& O. \

$ B, _0 U* m* K6 H    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 D/ y: d1 @, h# R: e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: s9 K, W7 _7 ^+ B  {, i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; m; r: r( Z2 p% T; t% q! L% |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( L/ j' z( h9 M7 }) G
2 w' B3 A, r: h0 Z- C7 c& n    mcasp->regs->XSTAT = 0x0000ffff; ; r1 l$ U% I0 F$ _4 z. I
    mcasp->regs->RSTAT = 0x0000ffff;
* U9 E7 }; {3 @, O2 F1 X
9 T! g9 M; _$ b    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ R6 Q4 b+ r9 s6 g' }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. l" ?/ s$ D! k  B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 I/ P3 ~7 E' C% I$ [, |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 E% G; ?: t1 T8 }& N+ y0 f
6 t9 p# p, r5 @6 z4 n! c$ I3 ?* v4 d    /* Write a 0, so that no underrun occurs after releasing the state machine */' _" q) `- L( x5 N0 m; v: R8 z
    mcasp->regs->XBUF5 = 0;
; n% i( A$ e6 A7 G& W- g* U8 p2 }    mcasp->regs->RBUF0 = 0;4 ~' D0 r  d7 ?! R7 ^1 e

: I! z" ?+ I# U' D- x2 f0 s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , y& |8 ]! S' ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 E+ U  {8 j: j0 `" e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + h) E4 f" q5 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" W9 q% z  L6 _4 K5 L
: g8 a( W0 b1 s& d  J# q5 A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 z) N: F3 r! I8 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 ~. Q: s- a+ D5 b7 B+ P/ u    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 y5 T. Q( k: D! j; o# W" Z" a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 {/ ?$ }" B: C0 g
+ Q+ r7 q3 k% [: {8 \* ]7 ]    CSR = 0x0000;; h* i7 J' P0 H  \" `% ], S9 O) v
    INTC_INTMUX1 = 0x3d;" e1 J9 }, C6 A$ n4 S
    ISTP = (unsigned int)vectors;
" X0 j; R, C. U1 e' H6 ~    ICR = 0xFFF0;  
9 g) j7 }+ M3 b6 d, @( o    IER |= 0x12;  + A3 F, M+ d( D5 q* Y7 L3 Q
    CSR |= 0x01;  
6 `. |# }& r; l: r" g& E' Z2 b# u- ?

' }& T( e' W* u
: Q8 H8 u  V! I' X. Y. k& e3 @还有就是两个输入输出函数:
* P( J* A: g! S0 F: svoid output_sample(Int32 out_data)# ~1 N" {* t0 v) ^3 z( L
{' y; M& u4 R: f$ ]! w0 d" w
  AIC31_data.uint = out_data;  2 F" H( O5 E0 m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 H8 b- }8 N6 J3 U1 s}
' ]* ]+ C: Z4 @( m3 @  G' p6 U; L% D' n
Int32 input_sample(void)6 N4 H: P+ @4 I' W( i6 v
{  & |' W$ E2 ?% u4 ]! t  t6 W
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: y# |% s) J% i$ @! @  return (AIC31_data.uint);
  w4 {. K: v# t}
7 p; J, u- h# C* w5 _( W1 K% D7 \3 K5 ]) }7 C) L
分享到:  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-3-8 15:55 , Processed in 0.049548 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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