C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( ~, B- e$ C. m# u. x" j
main文件:
, x8 h( a3 P4 b- {# s0 Einterrupt void interrupt4(void)  
! r! E+ B) I1 z2 T{- z, _* d; {. ~) ~! u& T
  Uint32 sample;
2 s% \' k% ?$ S# G+ j! q$ U4 c( L" g2 d8 Y3 U
  sample = input_sample(); // read L + R samples from ADC
$ t" g: q# O, U& D4 P% d  output_sample(sample);   // write L + R samples to DAC ' S. H4 g+ P- ]1 H# n! S+ y4 s( A
  return;' _, C5 l5 O( L/ J# l' m' s  I
}
& G5 {, u* n# p) p5 m! C$ t; _- [, Y; Z# [; w7 j; N
int main( void )
3 V& b5 R. I7 ~{
) ]+ v) }$ {3 N4 c) ~; I3 Q9 Q  }$ w8 o, I3 V/ ^0 k5 L
    /* Initialize BSL */6 {/ V2 B. s! B8 [& v
    EVMC6747_init( );( k3 _* [2 Z4 x* S7 i8 R+ f5 ]4 I
        /* Call evmc6747_intr function */
9 L3 @( _/ g& t( b4 r  u& |    aic3106_init( );8 {) `- T& a  u
        while(1);
3 e1 v! E% k4 p% S$ R5 n. D2 f. }}+ q+ b! U! @1 Y; }0 m" x* c

; h( d( p/ v. s) {: }) ^1 Y( L- ^" _2 P" o: ~/ z+ g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 m& l) p# k. ?5 A
/* Initialize MCASP1 */
; `+ j1 L  l3 H; L2 c2 B    mcasp = &MCASP_MODULE_1;
5 w' e1 H) C8 K' b9 u    mcasp->regs->GBLCTL  = 0;       // Reset( [: k8 Q& P" J
    mcasp->regs->RGBLCTL = 0;       // Reset RX5 e7 G3 U6 @, W% b$ a: t1 E. H; G
    mcasp->regs->XGBLCTL = 0;       // Reset TX7 X7 y9 o4 S% ]1 j& [& O- v
    mcasp->regs->PWRDEMU = 1;       // Free-running4 C3 f% {9 @1 ?  I4 s- z5 S
   // configure McASP0 receive registers
2 p4 d8 t! ?# z  A* R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; @/ f- g$ ~! V/ G2 ^' H/ \% J7 p$ D( Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" A. s, N' ^1 y( H0 P2 z& L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ V/ ?) V" o' t& X3 t4 r8 |9 v' S- _9 Z9 b
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 h, x2 A& G2 q* ?/ |% y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 @3 T2 j9 k+ z9 |+ i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 p, i( s1 y0 w/ ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ m* D1 O0 y1 U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( @! h$ `) `( K9 w0 q0 H
( Y! b8 B3 ?9 E! q$ O& s
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  K# o1 [2 M6 K9 F
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: l0 @/ p4 }8 U    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" a- |+ r) r/ x7 `- i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ C7 P) [0 D5 {) }: \  ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" ^3 n" @3 F! O; T    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ l: U, C, |/ x  T. i
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 A6 _1 c- F5 c3 ~! S: B    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 q0 [1 P  A/ k3 e+ k3 X* X) j
4 m7 _  v7 u8 l+ m) |8 `( |    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 N+ v" p5 p$ \" b  _9 j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- l' p6 S; }5 S4 c" q
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ _% b" X- I# h    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( v- a# r) _3 [) Q: v- C9 ?, m3 ~$ Y6 C8 Z: q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 I( \5 g6 t& H4 P    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' X  E- Y* b2 @  y  ~8 C9 |0 d5 x, M    mcasp->regs->AMUTE      = 0x00000000; // Not used
) |0 O* B8 `) O$ a9 A5 \8 Z- B  q0 U/ ^
/* Starting sections of the McASP*/
  G# s/ W& ^8 ^  N  O3 E2 ~1 _3 F$ {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 u6 E$ i7 u( c2 u! f7 J) _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 w. E: Y; m/ h) E2 |& \; ]; S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & x. ^7 y" d* K5 M) K# P* X. P7 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ r& N+ O+ t4 @! B# a" a
7 T7 E( f$ ~" x0 [
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 D3 E, i% I  z: g7 v7 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. r! D  Y3 h+ t% n+ q! r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 B6 K: s( a: @# R6 _: {  X' ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 \* q  E5 W& S: N! a' V: I8 Y7 u/ ~3 z
    mcasp->regs->XSTAT = 0x0000ffff; / ]/ X+ R6 J" j
    mcasp->regs->RSTAT = 0x0000ffff; 5 M9 s$ o; D! F6 n

6 g, b4 d- }; o6 a" K! b7 Q) a8 F8 i    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 n" ^. U) |2 d* Z% o% x( F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ |9 T5 s# A( u4 X* D* r2 M
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 I1 B' x- h- }! Q* p( j! E2 {( O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 i  p7 Z  z. T5 i( n
. i" Z  x. M+ e* X5 F! N% q1 M8 H
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 M- C! ~3 W3 `0 `
    mcasp->regs->XBUF5 = 0;
6 z# c8 R5 ?" h/ T8 m8 S( B    mcasp->regs->RBUF0 = 0;
/ J3 s4 H& h& y3 U( l$ m
5 B8 w& o! z' s, |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ E( n9 Y9 [+ Z( u- G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 |8 s- J* X- a3 K    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . V5 K' ]- L7 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# y1 c) Z  s6 a4 w5 O
' Y" U2 J2 E- s% N! @: n6 O    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 x4 h/ F" A; Q3 Q& p- M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" R# d' E4 j. L$ W0 s" |
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 K' a. Z0 t3 B  u" K  I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ {7 P! w! c7 O- n

& l* {5 g, f! e5 r    CSR = 0x0000;& ~0 H! W! L: b1 {6 ~+ h. a
    INTC_INTMUX1 = 0x3d;* G/ p1 `6 f) B. V  b. e
    ISTP = (unsigned int)vectors;
3 X. J$ x. c# ^+ y; s" K) H    ICR = 0xFFF0;  : O$ ?" j. w# s9 C9 H' B
    IER |= 0x12;  ) H; F) @2 ~/ c5 ]* s0 c
    CSR |= 0x01;  
: \% g0 l% b" d; `
& X+ f* ^5 ]( }% d
. @" J' V( f' g: _7 N4 D7 i9 p9 F6 Y2 P
还有就是两个输入输出函数:
# M, x# ]: C$ L7 P+ O* d8 U. }( q% Pvoid output_sample(Int32 out_data)9 G/ j2 J2 k7 i- ^( C4 n# ~
{
  L! G' P; o4 Z1 C3 u$ Z  AIC31_data.uint = out_data;  
& h/ ~" T% y  U+ g: v3 i- p  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 z% a/ L5 a- n# o3 }}
$ ]  m1 E  n: w% ~% H- `" Y- z  K0 c
Int32 input_sample(void)) Y( D7 v& [: x! @
{  
; Q1 u1 g6 l" f8 U/ B0 F3 {  AIC31_data.uint = MCASP1_RBUF0_32BIT;* `9 C4 I! f# g  L1 k2 t' o
  return (AIC31_data.uint);3 S1 \1 i" w$ ~3 [' O
}( K1 B8 [6 g8 l7 G/ o$ o
- s3 s8 {' b7 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, 2025-11-22 15:28 , Processed in 0.038239 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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