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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, D* M" }3 b8 ?0 nmain文件:
& o7 Z+ q4 W7 yinterrupt void interrupt4(void)  
' a% r( S7 N: i0 @{
; V8 l9 e; @6 J. m8 b! b  Uint32 sample;4 l7 z; Q8 \4 @/ m
9 D9 ~1 }. E" e! F* M, R6 m7 D
  sample = input_sample(); // read L + R samples from ADC
' X( O& c, \2 S( Z/ ]/ \  output_sample(sample);   // write L + R samples to DAC
9 G$ F) F6 m$ C# C& M4 Y  return;
, ^. z. O4 H: C2 ]$ P1 P( @}
! S4 d/ y" L1 c7 A2 }+ g
! s  j8 |6 ]" p; Bint main( void )
! N- G+ W- V5 Y  |{
/ n! T/ K6 F  y( [7 V, S
7 b( _4 q' F4 [+ B  b    /* Initialize BSL */
$ f3 J$ W5 n3 P3 \! _9 Z    EVMC6747_init( );
  B4 Q, S! J1 U0 }        /* Call evmc6747_intr function */6 a, S: D! J7 N8 p& ]
    aic3106_init( );
- w4 I* u# g! m, |! a  Q$ p/ ^  r        while(1);
0 ]. ^; K% H; t6 r: v}" b0 Y4 y7 ^# e) G
0 o# u! z  f8 J+ B7 x0 D2 M" a
4 K9 e+ O% S! y2 @$ S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* t# d* g6 p# h9 H) U/* Initialize MCASP1 */0 E6 N: K% O4 R' h7 O
    mcasp = &MCASP_MODULE_1;9 ^0 c  r2 n  n% H
    mcasp->regs->GBLCTL  = 0;       // Reset6 S% e9 C% A! m8 t& H" f5 q6 E5 i
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 J2 {5 }" J6 O, J1 G    mcasp->regs->XGBLCTL = 0;       // Reset TX) N) {1 b! x* r0 h$ g$ m1 Z
    mcasp->regs->PWRDEMU = 1;       // Free-running; D' Q' `* q+ d) o
   // configure McASP0 receive registers
4 [" v! o9 G" R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' w6 ~. R1 T1 k- C: E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( D# W% o, g$ d* M( j) E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: C0 `: q. s8 [. Y) s* Y9 f
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 r3 R9 i9 M) M/ {+ Q9 }: h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) @4 R/ V/ S: E! H' Q% v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- m! }* E& c; w' F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 D# F; m# Z8 h2 H' Y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% ?8 u0 I/ b& p+ ^0 Z: E1 H" @+ `9 f0 ?3 p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% G* d! v# F6 ~1 A# N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 B5 V9 X! d/ u% c2 D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ _- @3 A) X' D7 u2 a! s
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 ~  ^; J5 c, h- Z% ^$ B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' {& X# u* Q4 ~9 m0 [  J) j
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. W! ]9 l, [* u4 _: I    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! ^7 n/ q) V. M
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 X& h( C6 ~7 Q

* g: L3 d# m+ \) h0 |" G! a( k: |! _    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- ]2 D* Z$ `8 N0 W4 t# `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 Q; A- V& J. p4 D/ z    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 w) A6 [! @3 S: b# }  z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 {1 t+ [! w' |9 ~$ E
1 {: {2 j7 m% F( B6 r
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ x  p& A3 a; L( N4 H
    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 W' E7 n8 q0 z5 {2 o/ a
    mcasp->regs->AMUTE      = 0x00000000; // Not used! n6 ?3 [0 ~0 E5 b9 M8 e  m
% Y/ X- v: J. C! E
/* Starting sections of the McASP*/
6 v3 c$ d( j0 k4 J4 H% J    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! B  @2 F' j& T: ]' W: I0 W( N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    E, K5 D5 V5 O1 D! l8 }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* i( A" I7 ]! k) _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ J1 E, G/ D4 f  |) a

+ L5 L, e3 k0 s& ]. o4 a7 `    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   |2 y% Q, h9 o' {! s( l# D- I! }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& w. I7 x$ G! k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( f/ F, Q0 \" }5 ^; u4 d1 d  p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# ~  ]. o! [2 \( V! O
3 D6 h8 o, V3 b% S6 T: F
    mcasp->regs->XSTAT = 0x0000ffff;
2 j; f) x, W3 }* K# N' @    mcasp->regs->RSTAT = 0x0000ffff;   f. g5 ~/ p2 y/ \- J* w& F
) l, y! o' W' G$ P. H2 j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' C1 \# K  @% Z- O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 ^" S( s9 Q" L, [4 P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" J) G. T5 B+ ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) h/ u+ }5 b4 T. c
/ \$ ?% m5 M" f: u& ^0 u
    /* Write a 0, so that no underrun occurs after releasing the state machine *// v0 q! _0 p2 q6 z- ]
    mcasp->regs->XBUF5 = 0;
9 r: ~+ Q# g( D6 L; g    mcasp->regs->RBUF0 = 0;1 S8 L( P" I& @* z% ?7 J
( w* d) y3 ]( y$ |: M5 }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 ]3 x  K+ a: y* C) L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ [/ w' r; @+ H4 ?4 i5 O+ }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * Z8 I! u7 p" F! b4 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) [* L) O  f, \4 G& N

: q0 G+ K% A( N# ?7 ^; b" y. h    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ ?- o! B4 n. d+ ~9 T; @  @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ M( P- L7 m. A0 @/ |0 ?! l/ F3 W6 x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( Z) i8 Z: ^; g4 \8 d3 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. X. x( V7 x& G. g5 M& b3 [
! m6 I" L/ k" y$ H9 Z; {$ g. {: U    CSR = 0x0000;1 v- k" T6 P, Z0 k
    INTC_INTMUX1 = 0x3d;$ H: U8 E$ u* b; p2 Y; r
    ISTP = (unsigned int)vectors;
! _9 F: X5 O% g3 }  \$ j    ICR = 0xFFF0;  ; H6 v0 w- ?+ ^+ Z4 V
    IER |= 0x12;  7 N  H6 _. O# y/ s
    CSR |= 0x01;  
' N) K* c3 B6 @) F& N( {' J( [3 }* A* e  n

1 @" [: f+ Q4 L/ e3 b$ k5 u1 O% i" K* `, ]
还有就是两个输入输出函数:$ a$ ?* \' [# a! l4 M
void output_sample(Int32 out_data)
0 C, G' l+ ]" V& ^1 u{4 ^" b" A. I) N8 p* t. M* h! m
  AIC31_data.uint = out_data;  7 q8 R+ k5 j) b. n# W9 ^
  MCASP1_XBUF5_32BIT = AIC31_data.uint;  x' b& X2 o6 e) x
}
' ?. W+ C& `( d2 n+ }) g: W, C+ R# u
Int32 input_sample(void)
: B8 @1 P' S3 q( h- L  M{  
+ [- k8 u6 l; T' z, y% O0 D* _  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 I6 F7 A1 S0 _! E: n
  return (AIC31_data.uint);
8 [5 g8 v1 T2 B  s2 y6 T" j! Y( D}& l, J7 S& ?# S, s- D4 T
* m( W/ t% S5 A# G$ g! l& v/ U
分享到:  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-3 20:48 , Processed in 0.040611 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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