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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  {! F% b' f# r+ [9 v% w& z1 L
main文件:) g  ?* e) Q8 q- w3 C9 [: @
interrupt void interrupt4(void)  * Q$ h+ g$ v/ @3 V
{
" R6 k6 ]  Y% T. x! E' i& a/ l' b  Uint32 sample;
, \4 N2 Z* h1 x4 F
4 L* {( B5 z7 F& _2 F2 B  sample = input_sample(); // read L + R samples from ADC2 X$ Y: S6 `3 i  A! V- F
  output_sample(sample);   // write L + R samples to DAC
" V. `7 Q" |; d, j& ?  return;5 C& K: M7 q! B! j- C; v7 y
}
4 _! P* f, R4 u$ _! o. P5 P% e4 u9 ^/ o. t) W8 B9 _/ q9 L- O  g  M
int main( void )/ ^; j% V8 l6 k% p% n- y5 w
{
+ P+ j. r4 z0 a/ K4 U2 `
3 f- _9 e& t7 t5 f) t/ O/ S. I    /* Initialize BSL */
# y7 z1 z4 o2 x# q    EVMC6747_init( );$ S( ^2 c, |, Q
        /* Call evmc6747_intr function */; T; K# W# U' R9 E# M" G" R4 U
    aic3106_init( );
/ f7 O2 d1 U7 E7 S( ]        while(1);
% N' I! T5 T! }  v5 T}
# z2 X6 Q5 B# K* O2 ]! s5 p. P" a; J% s2 J# G: w7 r

, A( W7 W* i0 m2 ~' ~( x) ~0 waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" E: T3 d: m. ^" d! p
/* Initialize MCASP1 */' i- E! V  e  {  ^7 x3 k
    mcasp = &MCASP_MODULE_1;2 [3 a& q+ }' y& D+ Y
    mcasp->regs->GBLCTL  = 0;       // Reset1 E9 K2 ]" A+ ?- K
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 y4 v+ r7 U2 T* T9 b. w4 v    mcasp->regs->XGBLCTL = 0;       // Reset TX0 B: e4 w& [' @0 a2 E
    mcasp->regs->PWRDEMU = 1;       // Free-running4 x& m# w+ z1 E0 S& M% N* w
   // configure McASP0 receive registers4 U) x5 Z4 q- Q* e: x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, X2 i+ [# ?, z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 H# Y5 g! E; X$ P* [4 }3 }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% P& F( w$ k, C( M: R1 v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). i  ?# L% F- p8 N: F' w
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 l3 J) t4 P* O$ l! V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* G2 k' R5 s  O& b    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( |0 r) a7 s5 m+ o1 D$ M3 P2 [1 i    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 @, C  t" K3 p

: r6 ~; G! G: q2 ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! c) ?- S9 ?4 i# q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; n" m0 l- w' }% }
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 O9 O: [# u4 ~: _; ]. d5 Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 [2 i8 ]/ i% g; R) o2 v
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: [1 J2 A! W5 m8 Y6 l- G9 F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 i% o& X  ~, C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( l, L: Q- S  w3 P1 |) h    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  R  @  }) y: k- p  x# C5 E3 W2 p6 O' m8 n$ F/ h) g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 R9 L4 x: p& t' U2 E6 [    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ V4 k4 s8 i" D4 f& k) d7 G& P    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 K( @* Y  {& N7 t    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 e; T% L5 ~/ d+ m# E' H
) B! e2 ]- G. T* {+ H  e
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 _9 C" o$ q# P1 h( w) A2 H    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" a* D* Z$ w. ]; m/ f" I    mcasp->regs->AMUTE      = 0x00000000; // Not used4 f0 u* H3 r& O% g
: i# S+ K% h; Q
/* Starting sections of the McASP*/
! m' }6 m* I: {# s    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 W$ C- M. Z$ E% }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 g2 k  D1 ^' O  ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   H& Y" W8 M5 x. g7 Q1 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# Y7 P9 S, f$ ^3 p+ i) }0 J

' I3 b% f. J; t1 d# D1 I" R( r    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 |5 u" c- F& ]3 o) O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% l/ s; w5 Y. h: |0 m    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# w* n; y; v, @1 S+ q0 p# a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! ]' l1 R- A- N; H* ]1 n
5 c; Y) z$ n  D1 d# e! c    mcasp->regs->XSTAT = 0x0000ffff;
+ _$ H) ]; b$ N' Q    mcasp->regs->RSTAT = 0x0000ffff;
5 V$ g: \6 A/ |
  ~+ X9 S9 t2 `; _    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, A3 h+ F* _* n0 p9 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% y- v7 @3 z7 Y+ Y- F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 g% A% Q6 ^/ q- ~1 v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ I5 S1 r6 {9 B0 d) A9 J! E4 n0 z' a* `6 M0 j- \
    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 O. k- g1 |$ i% V    mcasp->regs->XBUF5 = 0;
" _7 F/ v& I. q9 P# d& T% G    mcasp->regs->RBUF0 = 0;
6 F; Y" y  a5 I2 i2 @! N6 q4 B$ F2 [& q- I! |7 C! b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' u3 t, ^2 a: [1 v! W2 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 z% p& Q5 M3 B8 C- M0 e: `% h4 T$ p: n
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& n! t. M% P, O: c$ n+ [+ L, E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" m9 s8 k- T, g) X
& n; l- {& z1 t( p7 I% G    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 m6 e- y4 o  J6 p! D/ T3 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' @- O% i6 Q0 S6 v4 p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 n+ h& }% e6 C$ r- x- m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ G6 ~( [6 C" O/ V: W& I3 }: M- c. f3 K- h+ i1 w( J
    CSR = 0x0000;3 O8 n1 j& y8 Y: t0 @+ s
    INTC_INTMUX1 = 0x3d;; u8 K/ T, Y; X, H! R, q  Q: L5 b
    ISTP = (unsigned int)vectors;, E( R4 v$ f8 ], s4 q. t) l
    ICR = 0xFFF0;  
% x) M5 r, _9 Y    IER |= 0x12;  , s/ p5 l5 `7 e# C! h+ C- w
    CSR |= 0x01;  
8 ^3 b/ Z1 j9 V" J$ ]. J( T* L
/ j& i- I% S- t; S' o3 j! L  C6 W* A* W" ~0 ^& Z" u
2 e  U! I! \2 Q; c) {- c
还有就是两个输入输出函数:
8 M4 L/ I) @! P! evoid output_sample(Int32 out_data)( n, y$ Y  I/ f7 r# L/ C) U9 T
{
: X% J7 ^& M  {3 {# O4 R# ?  AIC31_data.uint = out_data;  7 F* p- I& I- u, H/ e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ W  u4 d/ j$ D8 Q4 S$ F8 |# m
}
4 ~1 h  e4 S. n# t3 k( N2 r! r- |, u$ e( }9 [! ]8 v" y. @, u& l
Int32 input_sample(void)
- M5 e$ k" d3 }: d  `{  
* b) ]0 q4 h4 U" \  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ j# c4 e3 f4 \, @1 B
  return (AIC31_data.uint);  }# r9 _+ @; V, s0 }) N  V+ Y
}
- {5 F8 {- Z; K: w2 `& g! B+ \
! N- q0 ^) }# a; g+ e5 Y5 t8 Z- ?
分享到:  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-12-30 12:46 , Processed in 0.039172 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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