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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 ?0 P+ O7 U( @5 P2 z6 Tmain文件:7 d9 |1 F1 E* ]& H# ]
interrupt void interrupt4(void)  
6 U+ F8 X( X. ^6 W4 x{
* U8 d" i: J8 ?; D, f  Uint32 sample;. o3 i/ h$ Q) d
1 A4 Q8 p8 d) s
  sample = input_sample(); // read L + R samples from ADC
9 M; Z) s: O( c; h  output_sample(sample);   // write L + R samples to DAC   L+ B; N2 d& f! [: [0 K, f
  return;+ U+ S, j. J* R5 }
}
! u# S5 J0 v0 G7 Q( X8 q
( G4 Q; F) t" Z$ C" Kint main( void )) O4 {0 [1 k) {
{
5 O/ y" P1 l( q( c& p, `( k# a8 R
- g8 @( X  E; s' F9 j    /* Initialize BSL */3 n, ^) s, ?; q1 \
    EVMC6747_init( );' o9 l" w8 h3 Q9 N, m  I
        /* Call evmc6747_intr function */: Z- V4 u. k2 e1 @- Y3 N7 T
    aic3106_init( );, D# q) e3 i2 Y. m7 }
        while(1);
4 O6 v) a% g6 V! k% W}
- f2 B6 h* n* Y, s4 Q9 |& ~9 m4 `

8 d& l* j% I, Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 l6 X1 |/ y) c( G* f/* Initialize MCASP1 */
& u" J- C, t. ?$ @8 X4 n# ~0 v    mcasp = &MCASP_MODULE_1;( M0 I/ y3 V6 h& Q+ [
    mcasp->regs->GBLCTL  = 0;       // Reset% S9 m# v$ W2 C3 ]" f& z3 a4 N
    mcasp->regs->RGBLCTL = 0;       // Reset RX
, u# B5 s* H0 L; |0 Z    mcasp->regs->XGBLCTL = 0;       // Reset TX  F  [# G% C' |% W) M8 O  ?
    mcasp->regs->PWRDEMU = 1;       // Free-running1 Z7 }# t5 ]9 `7 ^# w/ E( k; ^( o7 M
   // configure McASP0 receive registers
5 E0 k: f; T9 R% f+ j! m5 |0 q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 e1 W  ?+ v" z9 M9 i8 v9 p    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  h* n+ L& {$ H: Y; i0 V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( f  l+ N4 W- K# Z- D& ^5 i6 ~9 z) p/ |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' w7 P2 F' c0 J# v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 ^9 H, W; j+ {& _  \$ F* W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 u7 {5 @5 l; d    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 D. r' B' f7 @- T0 r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ m/ H4 E9 s% p/ o( m# W
7 x; Y5 T# g" K1 W; q! p. y' a
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: D2 Z/ f! R. X2 ?/ d
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ D% `. X+ O( }4 m' ]0 L5 q$ g! U  C    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, ]1 y9 W  s9 \0 l6 s$ m' S; a" z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- b& v+ v& D; o( h4 v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 ?1 l0 t/ l/ x( b+ c+ N3 }! a
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& d% m* W3 u2 D9 t% ?3 C
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 S$ a3 c3 x* E! Q$ G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- o9 h$ Q9 Z0 S9 j' C' G

( J9 O$ {" u  K; k$ T: [/ F0 k8 k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' ]1 }* I# R! E$ Q: A& o* _2 s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% L7 H; F" F1 i" }# z" j  ^5 a# L    mcasp->regs->PFUNC      = 0;          // All MCASPs& B+ {0 F2 [) N1 [- R2 N9 Y# M
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; A: G  B: U6 `; M5 ^# i( F
2 \' d7 e  L) d9 a0 H% G! m
    mcasp->regs->DITCTL     = 0x00000000; // Not used
, T7 `; `, I. t* [    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ N" I/ G- f- N* |7 D; X: D
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% |' f0 }( e4 M4 A6 e
3 V% R( F; V4 t6 X) f/* Starting sections of the McASP*/. d3 K! Q" M0 }3 P4 N6 j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' y" o6 }% F8 P3 z# w! H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . X4 ?6 x) b5 _- n4 e, f5 t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, W; @* q# p8 W6 F" a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 h# f0 e) |5 p* c% U
+ d2 p6 C7 [# o) q0 j2 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) d' R9 X1 q- B: a1 l0 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 O7 q$ V% }1 s* L# K/ \. D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: u" m0 q* l7 a1 c, u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 r: ]' v4 j$ m- W3 J! F) H( u. j* {
    mcasp->regs->XSTAT = 0x0000ffff;
( F4 X9 p/ V7 \, K, f4 H    mcasp->regs->RSTAT = 0x0000ffff;
* Q  U+ Z/ X  N6 D0 o) k- P7 L) T/ E0 U# _8 X
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! z- N" {3 ]# i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ A/ `; n" Y' c. |4 V3 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % t  q: Z  i, P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 T, m4 h. ~$ p

& U2 g% Z7 t* u: l2 {( I& F    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 Y$ v* E, O+ \0 ]. L    mcasp->regs->XBUF5 = 0;
$ ]/ k& j- ]& n' p, j/ e    mcasp->regs->RBUF0 = 0;
# X; r' a1 D' o5 D7 F+ a
6 K: ~( P6 m" q) Z  }3 a    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! h3 j5 @# P# l, b; K/ b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  k& |( \( A! ?' G& D    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 j8 O4 }" ~$ i3 i1 E* }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# u; H$ h0 ^8 ?3 q

% R! w* K8 a# ?# P    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 _# d, l$ W. _8 [/ n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' A/ U7 D: L& Z0 m8 G) L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! N; G( f" w9 J  P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" d% k2 {, \. {, L! G- A& |0 \1 z" y4 R' \
    CSR = 0x0000;9 T: R2 y# [% R2 d; |! E0 `
    INTC_INTMUX1 = 0x3d;( U5 }0 K& \9 p
    ISTP = (unsigned int)vectors;6 N. ^9 @6 ?4 I$ Y* u1 ?
    ICR = 0xFFF0;  
' v5 D9 ]& V3 q& A! c$ X    IER |= 0x12;  
$ G8 }2 G8 [5 g2 m    CSR |= 0x01;  
8 Y  r  E$ t9 c
# v' h3 Y$ Z3 R+ V3 [3 n9 O% _  b( S" a; g
2 K& _5 s9 s$ G" p
还有就是两个输入输出函数:
& }& m* J  F. R  W" Wvoid output_sample(Int32 out_data)3 N2 r2 D7 N/ N8 C( q$ m
{' Z) g/ @+ c3 P% o
  AIC31_data.uint = out_data;  
; A4 ?5 Q7 z! m4 w2 ~" ]+ f  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 E) d! y" ^. S' {5 A8 l# k
}" j6 E9 J, q  I* }7 O; z- o) d, e% R

0 p3 S4 e% c0 Q4 LInt32 input_sample(void)
+ Z  ~0 g  W# b; C0 T+ i* i6 c" o{  
( V3 Z3 r( F; t% l9 E  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, {0 W1 ]- a; A' Z2 {  return (AIC31_data.uint);
( v7 f$ ?0 ~( ]7 a' u5 L}% D' D4 H0 g# G' i9 g7 {! F* }

0 ?& q+ Q# w: c$ c$ `
分享到:  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-18 03:50 , Processed in 0.047918 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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